Appendix overview

In this appendix, I report additional exploratory analyses of the organization of the sets of “conceptual units” that were excluded from the main text of Chapter IV, including: (a) Visualizations and analyses of the relationships among conceptual units using scales derived from EFA of children’s own responses, rather than adults’ responses, for 7- to 9-year-old children in Study 3, 4- to 6-year-old children in Study 3, and 4- to 5-year-old children in Study 4; (b) Visualizations and analyses of age-related changes in difference scores between conceptual units (scored using adults’ scales) for 7- to 9-year-old children in Study 2, 4- to 9-year-old children in Study 3, and 4- to 5-year-old children in Study 4; and (c) Visualizations of the joint dependency of HEART on both BODY and MIND.

Relationships among conceptual units using scales derived from children’s EFAs

In Chapter IV, I used adults’ EFA solution to construct BODY, HEART, and MIND scales and used these scales to assess the organization of these adult-like conceptual units among both adult and child samples. For Study 2, I also used 7- to 9-year-old children’s own EFA solution to construct a separate set of scales based on children’s own conceptual units and conducted a separate set of analyses of the organization of these “child-like” conceptual units. Here I present a parallel set of analyses using children’s own EFA solutions (rather than adults’) to assess the organization of conceptual units among both older children (7-9y of age) and younger children (4-6y of age) in Study 3, as well as among children (4-5y of age) in Study 4.

Study 3

Older children (7-9y), using their own scales

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 6 items each; see Table B.1.

Visualization and analysis of asymmetries

Visualizations of relationships among 7- to 9-year-old children’s scores on the BODY, HEART, and MIND scales are provided in Figure B.xx, row A. The results of Bayesian regressions comparing difference scores between conceptual units to zero, controlling for differences in assessments of the nine “diverse characters” that were featured as target characters in these studies, are provided in Table B.xx.

On the whole, these results (using BODY, HEART, and MIND scales derived from EFA 7- to 9-year-old children’s responses) are very similar to those presented in the main text of Chapter IV (using adults’ BODY, HEART, and MIND scales): Children systematically endorsed BODY and MIND items more strongly than HEART items, but showed no systematic asymmetry between BODY and MIND. This is unsurprising, since children’s and adults’ scales were so similar to each other (see Table B.xx).

Younger children (4-6y), using their own scales (three-factor solution)

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY*, HEART*, and MIND scales of 5 items each; see Table B.1.

Visualization and analysis of asymmetries

Visualizations of relationships among 4- to 6-year-old children’s scores on the BODY*, HEART*, and MIND scales are provided in Figure B.xx, row B. The results of Bayesian regressions comparing difference scores between conceptual units to zero, controlling for differences in assessments of the nine “diverse characters” that were featured as target characters in these studies, are provided in Table B.xx.

As in the results presented in the main text of Chapter IV (using adults’ BODY, HEART, and MIND scales), 4- to 6-year-old children systematically endorsed BODY* items more strongly than MIND items. This is further evidence of a markedly un-adult-like intuition that BODY may be a more basic conceptual unit than MIND.

In contrast to the results presented in the main text of Chapter IV, 4- to 6-year-old children’s BODY* vs. HEART* difference scores were indistinguishable from zero, and they systematically endorsed HEART* items more strongly than MIND items. Both of these observations render 4- to 6-year-old children’s conceptual organizations even less adult-like than those reported in Chapter IV.

Younger children (4-6y), using their own scales (two-factor solution)

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY-HEART and MIND scales of 6 items each; see Table B.1.

Visualization and analysis of asymmetries

Visualizations of relationships among 4- to 6-year-old children’s scores on the BODY-HEART and MIND scales are provided in Figure B.xx, row B. The results of a Bayesian regression comparing difference scores between conceptual units to zero, controlling for differences in assessments of the nine “diverse characters” that were featured as target characters in these studies, are provided in Table B.xx.

The main take-away of this analysis is that 4- to 6-year-old children reliably endorsed BODY-HEART items more strongly than MIND items.

Discussion

Table B.1: Scales for each of the conceptual units (factors) identified by EFA for US Adults, older children, and younger children in Study 3 (see Chapter III). For younger children, this includes scales for both three- and two-factor EFA solutions. A checkmark indicates that a mental capacity was included in a scale for a particular sample. The conceptual units of younger children differed substantially from those of older children and adults, such that some mental capacities were included in different scales across age groups (e.g., feel scared was part of the BODY scale for older children and adults, but part of the HEART* scale for younger children). In these cases, the name of the scale is provided (rather than a checkmark).
Younger children, 4-6y
Capacity Adults Older children, 7-9y 3-factor solution 2-factor solution
BODY scale
feel pain
get hungry BODY-HEART
feel tired
smell things
feel scared HEART*
feel sick... BODY-HEART
get angry BODY-HEART
HEART scale
feel happy BODY-HEART
feel guilty MIND MIND
get hurt feelings BODY*
feel embarrassed
feel proud BODY-HEART
feel love
feel sad BODY-HEART
MIND scale
sense...far away
sense temperatures
figure out how to do things
be aware of things
remember things
make choices

Study 4

Younger children (4-6y), using their own scales (three-factor solution)

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 3 items each; see Table B.1.

Visualization and analysis of asymmetries

Visualizations of relationships among 4- to 6-year-old children’s scores on the BODY, HEART, and MIND scales are provided in Figure B.xx, row A. The results of Bayesian regressions comparing difference scores between conceptual units to zero, controlling for differences in assessments of the two “edge cases” that were featured as target characters in these studies, are provided in Table B.xx.

In these regressions, none of the asymmetries between conceptual units were reliably distinguishable from zero.

Younger children (4-6y), using their own scales (four-factor solution)

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY (nausea), BODY (other), HEART*, and MIND* scales of 3 items each; see Table B.1.

Visualization and analysis of asymmetries

Visualizations of relationships among 4- to 6-year-old children’s scores on the BODY*, HEART*, and MIND scales are provided in Figure B.xx, row B. The results of Bayesian regressions comparing difference scores between conceptual units to zero, controlling for differences in assessments of the nine “diverse characters” that were featured as target characters in these studies, are provided in Table B.xx.

The main take-aways of this analysis are that 4- to 6-year-old children reliably endorsed BODY (other) items more strongly than any other items, but showed no reliable asymmetries between the remaining conceptual units (BODY (nausea), HEART*, and MIND).

Discussion

Table B.2: Scales for each of the conceptual units (factors) identified by EFA for US Adults and younger children in Study 4 (see Chapter III). For younger children, this includes scales for both three- and four-factor EFA solutions. A checkmark indicates that a mental capacity was included in a scale for a particular sample. The conceptual units of younger children in the four-factor solution differed substantially from those of adults, such that some mental capacities were included in different scales across age groups. In these cases, the name of the scale is provided (rather than a checkmark).
Younger children, 4-6y
Capacity Adults 3-factor solution 4-factor solution
BODY scale
get thirsty BODY (other)
feel hungry BODY (other)
smell things BODY (nausea)
feel tired BODY (nausea)
feel sick BODY (nausea)
HEART scale
love someone MIND*
get sad
hate someone
feel sorry
get lonely
MIND scale
figure things out
remember things
know stuff
think
hear BODY (other)

The joint dependency of HEART on both BODY and MIND

A particularly robust and reliable finding reported in the main text of Chapter IV was that US adults virtually never endorsed HEART more strongly than either BODY or MIND. (US children between the ages of 4-9y also demonstrated increasingly adult-like asymmetries in their BODY, HEART, and MIND attributions with age.) I argued in that chapter that this pattern of findings is consitent with the possibility that adults’ mental capacity attributions are governed by an intuitive theory of mental life specifying that, in order for a being to have the social-emotional abilities of the HEART, it must also have the physiological sensations of the BODY and the perceptual-cognitive abilities of the mind.

I illustrated support for this hypothesis with a visualization of participants’ BODY, HEART, and MIND scores, which demonstrated that, among adults in Studies 1-4, strong endorsements of HEART abilities only occurred among participants who also gave strong endorsements of both BODY and MIND abilities (see Figure 4.11, top row). These tendencies appeared to be weaker among children (middle and bottom rows).

Here I provide a formal analysis of joint dependency in each age group separately, and a formal comparison of these tendencies across age groups. These analyses were conducted using data pooled across all samples (i.e., Studies 1-4 for adults, Studies 2 and 3 for 7- to 9-year-old children, and Studies 3 and 4 for 4- to 6-year-old children). The primary parameter of interest in these analyses is the interaction between BODY and MIND scores: If attributions of HEART are jointly dependent on attributions of both BODY and MIND, then the interaction between BODY and MIND scores should be a strong predictor of HEART scores, above and beyond either BODY scores or MIND scores on their own. In addition to using BODY scores (when MIND scores are at zero), MIND scores (when BODY scores are at zero), and the interaction between BODY and MIND scores to predict HEART scores, these models also include random intercepts for participants, nested within studies, and random intercepts for target characters.

Among adults, the interaction between BODY and MIND scores was clearly differentiable from zero, lending further support to the claim that HEART is jointly dependent on both BODY and MIND among US adults. In contrast, the interaction between BODY and MIND scores was not differentiable from zero among either 7- to 9-year-old or 4- to 6-year-old children (see “BODY * MIND” row in Table B.3), suggesting that this joint dependency is not present in the aggregate for either of these age groups. A formal comparison across age groups further confirmed these apparent developmental differences: The interactive effect was substantially attenuated among both older children and younger children, relative to adults (see “BODY & MIND” rows in Table B.4).

Table B.3: Regression analyses of the joint dependency of HEART on both BODY and MIND. The table presents results from a series of Bayesian regressions using pooled data from all samples within an age group (i.e., Studies 1-4 for adults, Studies 2 and 3 for 7- to 9-year-old children, and Studies 3 and 4 for 4 - to 6-year-old children. These regressions each included 4 fixed effect parameters: (1) the intercept, which is an index of HEART scores when BODY and MIND scores were both zero; (2) the effect of BODY scores on HEART scores (when MIND scores were zero); (3) the effect of MIND scores on HEART scores (when BODY scores were zero); and (4) the interactive effect of BODY and MIND scores on HEART scores. This last effect is highlighted in bold, because it is the primary parameter of interest for these analyses. In addition to the fixed effects listed here, these regressions included random intercepts for participants, nested within studies, for adults and for 4- to 6-year-old children; random intercepts for studies for 7- to 9-year-old children (since neither study with this age group featured a within-subjects design); and random intercepts for target characters (n = 21 for adults, n = 9 for both 7- to 9-year-old and 4- to 6-year-old children). For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
Adults
Children, 7-9y
Children, 4-6y
Parameter b 95% CI b 95% CI b 95% CI
Intercept 0.01 [-0.06, 0.08] 0.13 [-3.06, 3.76] -0.07 [-5.01, 4.44]
BODY 0.13 [ 0.05, 0.21] * 0.68 [ 0.38, 0.99] * 0.48 [ 0.30, 0.66] *
MIND -0.04 [-0.08, 0.00] * 0.14 [-0.12, 0.41] 0.41 [ 0.22, 0.60] *
BODY:MIND 0.42 [ 0.34, 0.51] * -0.12 [-0.52, 0.30] -0.13 [-0.43, 0.18]
Table B.3: Regression analyses of the joint dependency of HEART on both BODY and MIND. The table presents results from a single Bayesian regression on pooled data from all samples in all studies. This regression included 12 fixed effect parameters: (1) the intercept (for adults), which is an index of HEART scores among adults when BODY and MIND scores were both zero; (2-3) the differences between older children vs. adults and younger children vs. adults in their HEART scores when BODY and MIND scores were both zero; (4-6) the effect of BODY scores on HEART scores for adults, and differences from adults in this effect for older and younger children; (7-9) the effect of MIND scores on HEART scores for adults, and differences from adults in this effect for older and younger children; (10-11) the interactive effect of BODY and MIND scores on HEART scores for adults, and differences from adults in this interactive effect for older and younger children. These last three effects are highlighted in bold, because these are the primary parameters of interest for these analyses. In addition to the fixed effects listed here, the regression included random intercepts for participants, nested within studies, and random intercepts for characters (n = 24). For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
Parameter b 95% CI
HEART scores when BODY scores and MIND scores = 0
Intercept 0.00 [-0.07, 0.07]
Older children vs. adults 0.02 [-0.09, 0.12]
Younger children vs. adults 0.02 [-0.05, 0.10]
The effect of BODY scores on HEART scores when MIND scores = 0
BODY 0.13 [ 0.04, 0.22] *
BODY * Older children vs. adults 0.54 [ 0.34, 0.73] *
BODY * Younger children vs. adults 0.45 [ 0.29, 0.62] *
The effect of MIND scores on HEART scores when BODY scores = 0
MIND -0.06 [-0.10, -0.01] *
MIND * Older children vs. adults 0.31 [ 0.16, 0.46] *
MIND * Younger children vs. adults 0.45 [ 0.29, 0.60] *
The interactive effect of BODY scores and MIND scores on HEART scores
BODY * MIND 0.44 [ 0.34, 0.54] *
BODY * MIND * Older children vs. adults -0.62 [-0.88, -0.35] *
BODY * MIND * Younger children vs. adults -0.63 [-0.91, -0.36] *
LS0tCnRpdGxlOiAiQXBwZW5kaXggQjogQWRkaXRpb25hbCBleHBsb3JhdGlvbnMgb2Ygb3JnYW5pemF0aW9uIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDQKICAgIHRvY19mbG9hdDogeWVzCmFsd2F5c19hbGxvd19odG1sOiB5ZXMKLS0tCgpgYGB7ciBnbG9iYWxfb3B0aW9ucywgaW5jbHVkZSA9IEZ9CmtuaXRyOjpvcHRzX2NodW5rJHNldChmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMC42NywKICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgPSBGLCBlY2hvID0gRikKYGBgCgpgYGB7cn0KIyAjIGZvciBrbml0dGluZyB0byAuZG9jeAojIG91dHB1dDoKIyAgIHdvcmRfZG9jdW1lbnQ6CiMgICAgIHJlZmVyZW5jZV9kb2N4OiAiLi93b3JkLXN0eWxlcy1yZWZlcmVuY2UuZG9jeCIKIyBhbHdheXNfYWxsb3dfaHRtbDogeWVzCgojICMgZm9yIGtuaXR0aW5nIHRvIC5uYi5odG1sIAojIG91dHB1dDoKIyAgIGh0bWxfbm90ZWJvb2s6CiMgICAgIHRvYzogeWVzCiMgICAgIHRvY19kZXB0aDogNAojICAgICB0b2NfZmxvYXQ6IHllcwpgYGAKCmBgYHtyfQojIHJ1biB1ci1zZXR1cCBzY3JpcHQgKHdoaWNoIHJ1bnMgb3RoZXIgc2NyaXB0cykKc291cmNlKCIuL3NjcmlwdHMvX1NFVFVQLlIiKQoKIyBsb2FkIGluIEVGQXMgJiBuYW1lcyBmcm9tIENoYXB0ZXJzIElJSSAmIElWCnNvdXJjZSgiLi9zY3JpcHRzL3N0b3JlZF9jaDAzLlIiKQpzb3VyY2UoIi4vc2NyaXB0cy9zdG9yZWRfY2gwNC5SIikKYGBgCgojIEFwcGVuZGl4IG92ZXJ2aWV3CgpJbiB0aGlzIGFwcGVuZGl4LCBJIHJlcG9ydCBhZGRpdGlvbmFsIGV4cGxvcmF0b3J5IGFuYWx5c2VzIG9mIHRoZSBvcmdhbml6YXRpb24gb2YgdGhlIHNldHMgb2YgImNvbmNlcHR1YWwgdW5pdHMiIHRoYXQgd2VyZSBleGNsdWRlZCBmcm9tIHRoZSBtYWluIHRleHQgb2YgQ2hhcHRlciBJViwgaW5jbHVkaW5nOiAoYSkgVmlzdWFsaXphdGlvbnMgYW5kIGFuYWx5c2VzIG9mIHRoZSByZWxhdGlvbnNoaXBzIGFtb25nIGNvbmNlcHR1YWwgdW5pdHMgdXNpbmcgc2NhbGVzIGRlcml2ZWQgZnJvbSBFRkEgb2YgY2hpbGRyZW4ncyBvd24gcmVzcG9uc2VzLCByYXRoZXIgdGhhbiBhZHVsdHMnIHJlc3BvbnNlcywgZm9yIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gaW4gU3R1ZHkgMywgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkeSAzLCBhbmQgNC0gdG8gNS15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkeSA0OyAoYikgVmlzdWFsaXphdGlvbnMgYW5kIGFuYWx5c2VzIG9mIGFnZS1yZWxhdGVkIGNoYW5nZXMgaW4gZGlmZmVyZW5jZSBzY29yZXMgYmV0d2VlbiBjb25jZXB0dWFsIHVuaXRzIChzY29yZWQgdXNpbmcgYWR1bHRzJyBzY2FsZXMpIGZvciA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGluIFN0dWR5IDIsIDQtIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gaW4gU3R1ZHkgMywgYW5kIDQtIHRvIDUteWVhci1vbGQgY2hpbGRyZW4gaW4gU3R1ZHkgNDsgYW5kIChjKSBWaXN1YWxpemF0aW9ucyBvZiB0aGUgam9pbnQgZGVwZW5kZW5jeSBvZiBIRUFSVCBvbiBib3RoIEJPRFkgYW5kIE1JTkQuCgoKIyBSZWxhdGlvbnNoaXBzIGFtb25nIGNvbmNlcHR1YWwgdW5pdHMgdXNpbmcgc2NhbGVzIGRlcml2ZWQgZnJvbSBjaGlsZHJlbidzIEVGQXMKCkluIENoYXB0ZXIgSVYsIEkgdXNlZCBhZHVsdHMnIEVGQSBzb2x1dGlvbiB0byBjb25zdHJ1Y3QgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIHNjYWxlcyBhbmQgdXNlZCB0aGVzZSBzY2FsZXMgdG8gYXNzZXNzIHRoZSBvcmdhbml6YXRpb24gb2YgdGhlc2UgYWR1bHQtbGlrZSBjb25jZXB0dWFsIHVuaXRzIGFtb25nIGJvdGggYWR1bHQgYW5kIGNoaWxkIHNhbXBsZXMuIEZvciBTdHVkeSAyLCBJIGFsc28gdXNlZCA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuJ3Mgb3duIEVGQSBzb2x1dGlvbiB0byBjb25zdHJ1Y3QgYSBzZXBhcmF0ZSBzZXQgb2Ygc2NhbGVzIGJhc2VkIG9uIGNoaWxkcmVuJ3Mgb3duIGNvbmNlcHR1YWwgdW5pdHMgYW5kIGNvbmR1Y3RlZCBhIHNlcGFyYXRlIHNldCBvZiBhbmFseXNlcyBvZiB0aGUgb3JnYW5pemF0aW9uIG9mIHRoZXNlICJjaGlsZC1saWtlIiBjb25jZXB0dWFsIHVuaXRzLiBIZXJlIEkgcHJlc2VudCBhIHBhcmFsbGVsIHNldCBvZiBhbmFseXNlcyB1c2luZyBjaGlsZHJlbidzIG93biBFRkEgc29sdXRpb25zIChyYXRoZXIgdGhhbiBhZHVsdHMnKSB0byBhc3Nlc3MgdGhlIG9yZ2FuaXphdGlvbiBvZiBjb25jZXB0dWFsIHVuaXRzIGFtb25nIGJvdGggb2xkZXIgY2hpbGRyZW4gKDctOXkgb2YgYWdlKSBhbmQgeW91bmdlciBjaGlsZHJlbiAoNC02eSBvZiBhZ2UpIGluIFN0dWR5IDMsIGFzIHdlbGwgYXMgYW1vbmcgY2hpbGRyZW4gKDQtNXkgb2YgYWdlKSBpbiBTdHVkeSA0LgoKIyMgU3R1ZHkgMwoKIyMjIE9sZGVyIGNoaWxkcmVuICg3LTl5KSwgdXNpbmcgdGhlaXIgb3duIHNjYWxlcwoKIyMjIyBTY2FsZSBjb25zdHJ1Y3Rpb24KCmBgYHtyfQojIGRvbmUgaW4gY2gwNF9vcmdhbml6YXRpb24uUm1kCnNjYWxlc19lZmFfd2RtX2QzXzc5IDwtIHJlYWRSRFMoZmlsZSA9ICIuL3N0b3JlZC9zY2FsZXMvc2NhbGVzX2VmYV93ZG1fZDNfNzkiKQoKZDNfNzlfc2NvcmVkXzc5IDwtIHNjb3JlX2Z1bihkM183OSwgc2NhbGVzX2VmYV93ZG1fZDNfNzkpCnNhdmVSRFMoZDNfNzlfc2NvcmVkXzc5LCBmaWxlID0gIi4vc3RvcmVkL3Njb3JlZF9kYXRhL2QzXzc5X3Njb3JlZF83OSIpCmBgYAoKRm9sbG93aW5nIHRoZSBzdGVwcyBkZXNjcmliZWQgaW4gIkdlbmVyYWwgYW5hbHlzaXMgcGxhbiwiIGFib3ZlLCB5aWVsZGVkIGByIGZhY3RfbmFtZV9mdW4oZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNzkpYCBzY2FsZXMgb2YgYHIgc2NhbGVzX2VmYV93ZG1fZDNfNzkgJT4lIGNvdW50KGZhY3RvcikgJT4lIHN1bW1hcmlzZShtZWFuID0gbWVhbihuKSkgJT4lIHNlbGVjdChtZWFuKSAlPiUgYXMubnVtZXJpYygpYCBpdGVtcyBlYWNoOyBzZWUgVGFibGUgQi4xLgoKIyMjIyBWaXN1YWxpemF0aW9uIGFuZCBhbmFseXNpcyBvZiBhc3ltbWV0cmllcwoKYGBge3J9CnBsb3RzX2QzXzc5X3Njb3JlZF83OSA8LSByZWx2aXpfZnVuKGQzXzc5X3Njb3JlZF83OSwgY29sb3JzID0gY29sb3JzMDkpCmBgYAoKYGBge3J9CmZpZ19kM183OV9zY29yZWRfNzlfcGxvdHMgPC0gcGxvdF9ncmlkKAogIHBsb3RzX2QzXzc5X3Njb3JlZF83OVtbMV1dICsgCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogIHBsb3RzX2QzXzc5X3Njb3JlZF83OVtbMl1dICsgCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogIHBsb3RzX2QzXzc5X3Njb3JlZF83OVtbM11dICsgCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogIGxhYmVscyA9IGMoIkExIiwgIkEyIiwgIkEzIiksIG5jb2wgPSAzKQoKZmlnX2QzXzc5X3Njb3JlZF83OV9sZWcgPC0gZ2V0X2xlZ2VuZCgKICBwbG90c19kM183OV9zY29yZWRfNzlbWzFdXSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIikgKwogICAgc2NhbGVfZmlsbF9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCAKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGNvbG9yczA5LAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDkpKSArCiAgICBzY2FsZV9jb2xvcl9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLAogICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGNvbG9yczA5LAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gOSkpKQoKZmlnX2QzXzc5X3Njb3JlZF83OV9wbG90c19sZWcgPC0gcGxvdF9ncmlkKGZpZ19kM183OV9zY29yZWRfNzlfcGxvdHMsIGZpZ19kM183OV9zY29yZWRfNzlfbGVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjA1KSkKCmZpZ19kM183OV9zY29yZWRfNzlfdGl0bGUgPC0gZ2dkcmF3KCkgKyAKICBkcmF3X2xhYmVsKCJTdHVkeSAzOiBDaGlsZHJlbiwgNy05eSAodXNpbmcgdGhlaXIgb3duIHNjYWxlcykiLCBzaXplID0gMTYsIGZvbnRmYWNlID0gJ2JvbGQnLCB4ID0gMCwgaGp1c3QgPSAwKQoKZmlnX2QzXzc5X3Njb3JlZF83OV9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGZpZ19kM183OV9zY29yZWRfNzlfdGl0bGUsIGZpZ19kM183OV9zY29yZWRfNzlfcGxvdHNfbGVnLAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMC4xMiwgMSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjR9CiMgaW50ZXJpbSBwbG90IGZvciBlYXNlIG9mIHdyaXRpbmcKZmlnX2QzXzc5X3Njb3JlZF83OV9wbG90c19sZWdfdGl0bGUKYGBgCgpgYGB7cn0KZDNfNzlfc2NvcmVkXzc5X2RpZmYgPC0gZGlmZl9mdW4oZDNfNzlfc2NvcmVkXzc5KQpjb250cmFzdHMoZDNfNzlfc2NvcmVkXzc5X2RpZmYkY2hhcmFjdGVyKSA8LSBjb250cmFzdHNfc3VtX2R2MDkKCnNhdmVSRFMoZDNfNzlfc2NvcmVkXzc5X2RpZmYsICIuL3N0b3JlZC9kaWZmc2NvcmVfZGF0YS9kM183OV9zY29yZWRfNzlfZGlmZiIpCmBgYAoKYGBge3J9CnBsb3RfZDNfNzlfc2NvcmVkXzc5X2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQzXzc5X3Njb3JlZF83OV9kaWZmLCBjb2xvcnMgPSBjb2xvcnMwOSkKYGBgCgpgYGB7cn0KIyByX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfSEVBUlQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiMgICBkYXRhID0gZDNfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvcmVzID0gNCkKIyAKIyBzYXZlUkRTKHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9IRUFSVCwKIyAgICAgICAgICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfSEVBUlQiKQoKcl9kM183OV9zY29yZWRfNzlfZGlmZl9CT0RZX0hFQVJUIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9IRUFSVCIpCgpzdW1tYXJ5KHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArIGNoYXJhY3RlciwKIyAgIGRhdGEgPSBkM183OV9zY29yZWRfNzlfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiMgICBjb3JlcyA9IDQpCiMgCiMgc2F2ZVJEUyhyX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfTUlORCwKIyAgICAgICAgICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfTUlORCIpCgpyX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfTUlORCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfTUlORCIpCgpzdW1tYXJ5KHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9NSU5EKQpgYGAKCmBgYHtyfQojIHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfSEVBUlRfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArIGNoYXJhY3RlciwKIyAgIGRhdGEgPSBkM183OV9zY29yZWRfNzlfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAojICAgY29yZXMgPSA0KQojIAojIHNhdmVSRFMocl9kM183OV9zY29yZWRfNzlfZGlmZl9IRUFSVF9NSU5ELAojICAgICAgICAgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfNzlfc2NvcmVkXzc5X2RpZmZfSEVBUlRfTUlORCIpCgpyX2QzXzc5X3Njb3JlZF83OV9kaWZmX0hFQVJUX01JTkQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM183OV9zY29yZWRfNzlfZGlmZl9IRUFSVF9NSU5EIikKCnN1bW1hcnkocl9kM183OV9zY29yZWRfNzlfZGlmZl9IRUFSVF9NSU5EKQpgYGAKCmBgYHtyfQpyZWd0YWJfZDNfNzlfc2NvcmVkXzc5X2RpZmYgPC0gZGlmZl9yZWdfdGFibGVfZnVuKAogIHJlZ19saXN0ID0gbGlzdChyX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfSEVBUlQsCiAgICAgICAgICAgICAgICAgIHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9NSU5ELAogICAgICAgICAgICAgICAgICByX2QzXzc5X3Njb3JlZF83OV9kaWZmX0hFQVJUX01JTkQpLAogIHBhaXJfbGlzdCA9IGMoIkJPRFkgLSBIRUFSVCIsICJCT0RZIC0gTUlORCIsICJIRUFSVCAtIE1JTkQiKSwKICBzdHVkeV9uYW1lID0gIkNoaWxkcmVuLCA3LTl5ICh1c2luZyB0aGVpciBvd24gc2NhbGVzKSIsCiAgY2hhcl9sYWJlbCA9IGMoIkVsZXBoYW50IHZzLiBHTSIsICJHb2F0IHZzLiBHTSIsICJNb3VzZSB2cy4gR00iLAogICAgICAgICAgICAgICAgICJCaXJkIHZzLiBHTSIsICJCZWV0bGUgdnMuIEdNIiwgIlRlZGR5IGJlYXIgdnMuIEdNIiwKICAgICAgICAgICAgICAgICAiRG9sbCB2cy4gR00iLCAiUm9ib3QgdnMuIEdNIikpCmBgYAoKYGBge3J9CiMgaW50ZXJpbSB0YWJsZSBmb3IgZWFzZSBvZiB3cml0aW5nCnJlZ3RhYl9kM183OV9zY29yZWRfNzlfZGlmZiAlPiUKICBzZWxlY3QoLXN0dWR5LCAtcy5lLikgJT4lCiAgZmlsdGVyKHBhcmFtID09ICJJbnRlcmNlcHQiKSAlPiUKICBrYWJsZShkaWdpdHMgPSAyKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuNH0KIyBpbnRlcmltIHBsb3QgZm9yIGVhc2Ugb2Ygd3JpdGluZwpwbG90X2QzXzc5X3Njb3JlZF83OV9kaWZmCmBgYAoKVmlzdWFsaXphdGlvbnMgb2YgcmVsYXRpb25zaGlwcyBhbW9uZyA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuJ3Mgc2NvcmVzIG9uIHRoZSBfQk9EWV8sIF9IRUFSVF8sIGFuZCBfTUlORF8gc2NhbGVzIGFyZSBwcm92aWRlZCBpbiBGaWd1cmUgQi54eCwgcm93IEEuIFRoZSByZXN1bHRzIG9mIEJheWVzaWFuIHJlZ3Jlc3Npb25zIGNvbXBhcmluZyBkaWZmZXJlbmNlIHNjb3JlcyBiZXR3ZWVuIGNvbmNlcHR1YWwgdW5pdHMgdG8gemVybywgY29udHJvbGxpbmcgZm9yIGRpZmZlcmVuY2VzIGluIGFzc2Vzc21lbnRzIG9mIHRoZSBuaW5lICJkaXZlcnNlIGNoYXJhY3RlcnMiIHRoYXQgd2VyZSBmZWF0dXJlZCBhcyB0YXJnZXQgY2hhcmFjdGVycyBpbiB0aGVzZSBzdHVkaWVzLCBhcmUgcHJvdmlkZWQgaW4gVGFibGUgQi54eC4KCk9uIHRoZSB3aG9sZSwgdGhlc2UgcmVzdWx0cyAodXNpbmcgX0JPRFlfLCBfSEVBUlRfLCBhbmQgX01JTkRfIHNjYWxlcyBkZXJpdmVkIGZyb20gRUZBIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4ncyByZXNwb25zZXMpIGFyZSB2ZXJ5IHNpbWlsYXIgdG8gdGhvc2UgcHJlc2VudGVkIGluIHRoZSBtYWluIHRleHQgb2YgQ2hhcHRlciBJViAodXNpbmcgYWR1bHRzJyBfQk9EWV8sIF9IRUFSVF8sIGFuZCBfTUlORF8gc2NhbGVzKTogQ2hpbGRyZW4gc3lzdGVtYXRpY2FsbHkgZW5kb3JzZWQgX0JPRFlfIGFuZCBfTUlORF8gaXRlbXMgbW9yZSBzdHJvbmdseSB0aGFuIF9IRUFSVF8gaXRlbXMsIGJ1dCBzaG93ZWQgbm8gc3lzdGVtYXRpYyBhc3ltbWV0cnkgYmV0d2VlbiBCT0RZIGFuZCBNSU5ELiBUaGlzIGlzIHVuc3VycHJpc2luZywgc2luY2UgY2hpbGRyZW4ncyBhbmQgYWR1bHRzJyBzY2FsZXMgd2VyZSBzbyBzaW1pbGFyIHRvIGVhY2ggb3RoZXIgKHNlZSBUYWJsZSBCLnh4KS4KCiMjIyBZb3VuZ2VyIGNoaWxkcmVuICg0LTZ5KSwgdXNpbmcgdGhlaXIgb3duIHNjYWxlcyAodGhyZWUtZmFjdG9yIHNvbHV0aW9uKQoKIyMjIyBTY2FsZSBjb25zdHJ1Y3Rpb24KCmBgYHtyfQpzY2FsZXNfZWZhX3dkbV9kM180NiA8LSBzY2FsZV9mdW4oZWZhX3dkbV9kM180NiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXMgPSBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kM180NikKc2F2ZVJEUyhzY2FsZXNfZWZhX3dkbV9kM180NiwgZmlsZSA9ICIuL3N0b3JlZC9zY2FsZXMvc2NhbGVzX2VmYV93ZG1fZDNfNDYiKQoKZDNfNDZfc2NvcmVkXzQ2X3dkbSA8LSBzY29yZV9mdW4oZDNfNDYsIHNjYWxlc19lZmFfd2RtX2QzXzQ2KQpzYXZlUkRTKGQzXzQ2X3Njb3JlZF80Nl93ZG0sIGZpbGUgPSAiLi9zdG9yZWQvc2NvcmVkX2RhdGEvZDNfNDZfc2NvcmVkXzQ2X3dkbSIpCmBgYAoKRm9sbG93aW5nIHRoZSBzdGVwcyBkZXNjcmliZWQgaW4gIkdlbmVyYWwgYW5hbHlzaXMgcGxhbiwiIGFib3ZlLCB5aWVsZGVkIGByIGZhY3RfbmFtZV9mdW4oZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNDYpYCBzY2FsZXMgb2YgYHIgc2NhbGVzX2VmYV93ZG1fZDNfNDYgJT4lIGNvdW50KGZhY3RvcikgJT4lIHN1bW1hcmlzZShtZWFuID0gbWVhbihuKSkgJT4lIHNlbGVjdChtZWFuKSAlPiUgYXMubnVtZXJpYygpYCBpdGVtcyBlYWNoOyBzZWUgVGFibGUgQi4xLgoKIyMjIyBWaXN1YWxpemF0aW9uIGFuZCBhbmFseXNpcyBvZiBhc3ltbWV0cmllcwoKYGBge3J9CnBsb3RzX2QzXzQ2X3Njb3JlZF80Nl93ZG0gPC0gcmVsdml6X2Z1bihkM180Nl9zY29yZWRfNDZfd2RtLCBjb2xvcnMgPSBjb2xvcnMwOSkKYGBgCgpgYGB7cn0KZmlnX2QzXzQ2X3Njb3JlZF80Nl93ZG1fcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RzX2QzXzQ2X3Njb3JlZF80Nl93ZG1bWzFdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDNfNDZfc2NvcmVkXzQ2X3dkbVtbMl1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kM180Nl9zY29yZWRfNDZfd2RtW1szXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkIxIiwgIkIyIiwgIkIzIiksIG5jb2wgPSAzKQoKZmlnX2QzXzQ2X3Njb3JlZF80Nl93ZG1fbGVnIDwtIGdldF9sZWdlbmQoCiAgcGxvdHNfZDNfNDZfc2NvcmVkXzQ2X3dkbVtbMV1dICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCBsZWdlbmQuZGlyZWN0aW9uID0gImhvcml6b250YWwiKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIAogICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gY29sb3JzMDksCiAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gOSkpICsKICAgIHNjYWxlX2NvbG9yX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsCiAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gY29sb3JzMDksCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSA5KSkpCgpmaWdfZDNfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWcgPC0gcGxvdF9ncmlkKGZpZ19kM180Nl9zY29yZWRfNDZfd2RtX3Bsb3RzLCBmaWdfZDNfNDZfc2NvcmVkXzQ2X3dkbV9sZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjA1KSkKCmZpZ19kM180Nl9zY29yZWRfNDZfd2RtX3RpdGxlIDwtIGdnZHJhdygpICsgCiAgZHJhd19sYWJlbCgiU3R1ZHkgMzogQ2hpbGRyZW4sIDQtNnkgKHVzaW5nIHRoZWlyIG93biBzY2FsZXMsIDMtZmFjdG9yIHNvbHV0aW9uKSIsIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDNfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGZpZ19kM180Nl9zY29yZWRfNDZfd2RtX3RpdGxlLCBmaWdfZDNfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuNH0KIyBpbnRlcmltIHBsb3QgZm9yIGVhc2Ugb2Ygd3JpdGluZwpmaWdfZDNfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWdfdGl0bGUKYGBgCgpgYGB7cn0KZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmIDwtIGRpZmZfZnVuKGQzXzQ2X3Njb3JlZF80Nl93ZG0pCmNvbnRyYXN0cyhkM180Nl9zY29yZWRfNDZfd2RtX2RpZmYkY2hhcmFjdGVyKSA8LSBjb250cmFzdHNfc3VtX2R2MDkKCnNhdmVSRFMoZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmLCAiLi9zdG9yZWQvZGlmZnNjb3JlX2RhdGEvZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmIikKYGBgCgpgYGB7cn0KcGxvdF9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiwgY29sb3JzID0gY29sb3JzMDkpCmBgYAoKYGBge3J9CiMgcl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9IRUFSVCA8LSBicm0oCiMgICBkaWZmIH4gMSArIGNoYXJhY3RlciwKIyAgIGRhdGEgPSBkM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZKiAtIEhFQVJUKiIpLAojICAgY29yZXMgPSA0KQojIAojIHNhdmVSRFMocl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9IRUFSVCwKIyAgICAgICAgICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZX0hFQVJUIikKCnJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlfSEVBUlQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9IRUFSVCIpCgpzdW1tYXJ5KHJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgY2hhcmFjdGVyLAojICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkqIC0gTUlORCIpLAojICAgY29yZXMgPSA0KQojIAojIHNhdmVSRFMocl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9NSU5ELAojICAgICAgICAgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlfTUlORCIpCgpyX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZX01JTkQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9NSU5EIikKCnN1bW1hcnkocl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9NSU5EKQpgYGAKCmBgYHtyfQojIHJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0hFQVJUX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiMgICBkYXRhID0gZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQqIC0gTUlORCIpLAojICAgY29yZXMgPSA0KQojIAojIHNhdmVSRFMocl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfSEVBUlRfTUlORCwKIyAgICAgICAgICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9IRUFSVF9NSU5EIikKCnJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0hFQVJUX01JTkQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfSEVBUlRfTUlORCIpCgpzdW1tYXJ5KHJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0hFQVJUX01JTkQpCmBgYAoKYGBge3J9CnJlZ3RhYl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgPC0gZGlmZl9yZWdfdGFibGVfZnVuKAogIHJlZ19saXN0ID0gbGlzdChyX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZX0hFQVJULAogICAgICAgICAgICAgICAgICByX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZX01JTkQsCiAgICAgICAgICAgICAgICAgIHJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0hFQVJUX01JTkQpLAogIHBhaXJfbGlzdCA9IGMoIkJPRFkqIC0gSEVBUlQqIiwgIkJPRFkqIC0gTUlORCIsICJIRUFSVCogLSBNSU5EIiksCiAgc3R1ZHlfbmFtZSA9ICJDaGlsZHJlbiwgNC02eSAodXNpbmcgdGhlaXIgb3duIHNjYWxlcywgMy1mYWN0b3Igc29sdXRpb24pIiwKICBjaGFyX2xhYmVsID0gYygiRWxlcGhhbnQgdnMuIEdNIiwgIkdvYXQgdnMuIEdNIiwgIk1vdXNlIHZzLiBHTSIsCiAgICAgICAgICAgICAgICAgIkJpcmQgdnMuIEdNIiwgIkJlZXRsZSB2cy4gR00iLCAiVGVkZHkgYmVhciB2cy4gR00iLAogICAgICAgICAgICAgICAgICJEb2xsIHZzLiBHTSIsICJSb2JvdCB2cy4gR00iKSkKYGBgCgpgYGB7cn0KIyBpbnRlcmltIHRhYmxlIGZvciBlYXNlIG9mIHdyaXRpbmcKcmVndGFiX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUKICBzZWxlY3QoLXN0dWR5LCAtcy5lLikgJT4lCiAgZmlsdGVyKHBhcmFtID09ICJJbnRlcmNlcHQiKSAlPiUKICBrYWJsZShkaWdpdHMgPSAyKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuNH0KIyBpbnRlcmltIHBsb3QgZm9yIGVhc2Ugb2Ygd3JpdGluZwpwbG90X2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZgpgYGAKClZpc3VhbGl6YXRpb25zIG9mIHJlbGF0aW9uc2hpcHMgYW1vbmcgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbidzIHNjb3JlcyBvbiB0aGUgX0JPRFlcKl8sIF9IRUFSVFwqXywgYW5kIF9NSU5EXyBzY2FsZXMgYXJlIHByb3ZpZGVkIGluIEZpZ3VyZSBCLnh4LCByb3cgQi4gVGhlIHJlc3VsdHMgb2YgQmF5ZXNpYW4gcmVncmVzc2lvbnMgY29tcGFyaW5nIGRpZmZlcmVuY2Ugc2NvcmVzIGJldHdlZW4gY29uY2VwdHVhbCB1bml0cyB0byB6ZXJvLCBjb250cm9sbGluZyBmb3IgZGlmZmVyZW5jZXMgaW4gYXNzZXNzbWVudHMgb2YgdGhlIG5pbmUgImRpdmVyc2UgY2hhcmFjdGVycyIgdGhhdCB3ZXJlIGZlYXR1cmVkIGFzIHRhcmdldCBjaGFyYWN0ZXJzIGluIHRoZXNlIHN0dWRpZXMsIGFyZSBwcm92aWRlZCBpbiBUYWJsZSBCLnh4LgoKQXMgaW4gdGhlIHJlc3VsdHMgcHJlc2VudGVkIGluIHRoZSBtYWluIHRleHQgb2YgQ2hhcHRlciBJViAodXNpbmcgYWR1bHRzJyBfQk9EWV8sIF9IRUFSVF8sIGFuZCBfTUlORF8gc2NhbGVzKSwgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiBzeXN0ZW1hdGljYWxseSBlbmRvcnNlZCBfQk9EWVwqXyBpdGVtcyBtb3JlIHN0cm9uZ2x5IHRoYW4gX01JTkRfIGl0ZW1zLiBUaGlzIGlzIGZ1cnRoZXIgZXZpZGVuY2Ugb2YgYSBtYXJrZWRseSB1bi1hZHVsdC1saWtlIGludHVpdGlvbiB0aGF0IEJPRFkgbWF5IGJlIGEgbW9yZSBiYXNpYyBjb25jZXB0dWFsIHVuaXQgdGhhbiBNSU5ELgoKSW4gY29udHJhc3QgdG8gdGhlIHJlc3VsdHMgcHJlc2VudGVkIGluIHRoZSBtYWluIHRleHQgb2YgQ2hhcHRlciBJViwgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbidzIF9CT0RZXCpfIHZzLiBfSEVBUlRcKl8gZGlmZmVyZW5jZSBzY29yZXMgd2VyZSBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIHplcm8sIGFuZCB0aGV5IHN5c3RlbWF0aWNhbGx5IGVuZG9yc2VkIF9IRUFSVFwqXyBpdGVtcyBtb3JlIHN0cm9uZ2x5IHRoYW4gX01JTkRfIGl0ZW1zLiBCb3RoIG9mIHRoZXNlIG9ic2VydmF0aW9ucyByZW5kZXIgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbidzIGNvbmNlcHR1YWwgb3JnYW5pemF0aW9ucyBldmVuIGxlc3MgYWR1bHQtbGlrZSB0aGFuIHRob3NlIHJlcG9ydGVkIGluIENoYXB0ZXIgSVYuCgojIyMgWW91bmdlciBjaGlsZHJlbiAoNC02eSksIHVzaW5nIHRoZWlyIG93biBzY2FsZXMgKHR3by1mYWN0b3Igc29sdXRpb24pCgojIyMjIFNjYWxlIGNvbnN0cnVjdGlvbgoKYGBge3J9CnNjYWxlc19lZmFfcGFyX2QzXzQ2IDwtIHNjYWxlX2Z1bihlZmFfcGFyX2QzXzQ2LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lcyA9IGZhY3Rvcl9uYW1lc19lZmFfcGFyX2QzXzQ2KQpzYXZlUkRTKHNjYWxlc19lZmFfcGFyX2QzXzQ2LCBmaWxlID0gIi4vc3RvcmVkL3NjYWxlcy9zY2FsZXNfZWZhX3Bhcl9kM180NiIpCgpkM180Nl9zY29yZWRfNDZfcGFyIDwtIHNjb3JlX2Z1bihkM180Niwgc2NhbGVzX2VmYV9wYXJfZDNfNDYpCnNhdmVSRFMoZDNfNDZfc2NvcmVkXzQ2X3BhciwgZmlsZSA9ICIuL3N0b3JlZC9zY29yZWRfZGF0YS9kM180Nl9zY29yZWRfNDZfcGFyIikKYGBgCgpGb2xsb3dpbmcgdGhlIHN0ZXBzIGRlc2NyaWJlZCBpbiAiR2VuZXJhbCBhbmFseXNpcyBwbGFuLCIgYWJvdmUsIHlpZWxkZWQgYHIgZmFjdF9uYW1lX2Z1bihmYWN0b3JfbmFtZXNfZWZhX3Bhcl9kM180NilgIHNjYWxlcyBvZiBgciBzY2FsZXNfZWZhX3Bhcl9kM180NiAlPiUgY291bnQoZmFjdG9yKSAlPiUgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKG4pKSAlPiUgc2VsZWN0KG1lYW4pICU+JSBhcy5udW1lcmljKClgIGl0ZW1zIGVhY2g7IHNlZSBUYWJsZSBCLjEuCgojIyMjIFZpc3VhbGl6YXRpb24gYW5kIGFuYWx5c2lzIG9mIGFzeW1tZXRyaWVzCgpgYGB7cn0KcGxvdHNfZDNfNDZfc2NvcmVkXzQ2X3BhciA8LSByZWx2aXpfZnVuKGQzXzQ2X3Njb3JlZF80Nl9wYXIsIGNvbG9ycyA9IGNvbG9yczA5KQpgYGAKCmBgYHtyfQpmaWdfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9wbG90cyA8LSBwbG90X2dyaWQocGxvdHNfZDNfNDZfc2NvcmVkXzQ2X3BhcltbMV1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJDMSIpLCBuY29sID0gMykKCmZpZ19kM180Nl9zY29yZWRfNDZfcGFyX2xlZyA8LSBnZXRfbGVnZW5kKAogIHBsb3RzX2QzXzQ2X3Njb3JlZF80Nl9wYXJbWzFdXSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIikgKwogICAgc2NhbGVfZmlsbF9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCAKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGNvbG9yczA5LAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDkpKSArCiAgICBzY2FsZV9jb2xvcl9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLAogICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGNvbG9yczA5LAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gOSkpKQoKZmlnX2QzXzQ2X3Njb3JlZF80Nl9wYXJfcGxvdHNfbGVnIDwtIHBsb3RfZ3JpZChmaWdfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9wbG90cywgZmlnX2QzXzQ2X3Njb3JlZF80Nl9wYXJfbGVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4wNSkpCgpmaWdfZDNfNDZfc2NvcmVkXzQ2X3Bhcl90aXRsZSA8LSBnZ2RyYXcoKSArIAogIGRyYXdfbGFiZWwoIlN0dWR5IDM6IENoaWxkcmVuLCA0LTZ5ICh1c2luZyB0aGVpciBvd24gc2NhbGVzLCAyLWZhY3RvciBzb2x1dGlvbikiLCBzaXplID0gMTYsIGZvbnRmYWNlID0gJ2JvbGQnLCB4ID0gMCwgaGp1c3QgPSAwKQoKZmlnX2QzXzQ2X3Njb3JlZF80Nl9wYXJfcGxvdHNfbGVnX3RpdGxlIDwtIHBsb3RfZ3JpZCgKICBmaWdfZDNfNDZfc2NvcmVkXzQ2X3Bhcl90aXRsZSwgZmlnX2QzXzQ2X3Njb3JlZF80Nl9wYXJfcGxvdHNfbGVnLAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMC4xMiwgMSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjR9CiMgaW50ZXJpbSBwbG90IGZvciBlYXNlIG9mIHdyaXRpbmcKZmlnX2QzXzQ2X3Njb3JlZF80Nl9wYXJfcGxvdHNfbGVnX3RpdGxlCmBgYAoKYGBge3J9CmQzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiA8LSBkaWZmX2Z1bihkM180Nl9zY29yZWRfNDZfcGFyKQpjb250cmFzdHMoZDNfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmJGNoYXJhY3RlcikgPC0gY29udHJhc3RzX3N1bV9kdjA5CgpzYXZlUkRTKGQzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiwgIi4vc3RvcmVkL2RpZmZzY29yZV9kYXRhL2QzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiIpCmBgYAoKYGBge3J9CnBsb3RfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmIDwtIGRpZmZwbG90X2Z1bihkM180Nl9zY29yZWRfNDZfcGFyX2RpZmYsIGNvbG9ycyA9IGNvbG9yczA5KQpgYGAKCmBgYHtyfQojIHJfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlIRUFSVF9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgY2hhcmFjdGVyLAojICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFktSEVBUlQgLSBNSU5EIiksCiMgICBjb3JlcyA9IDQpCiMgCiMgc2F2ZVJEUyhyX2QzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZSEVBUlRfTUlORCwKIyAgICAgICAgICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZSEVBUlRfTUlORCIpCgpyX2QzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZSEVBUlRfTUlORCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZSEVBUlRfTUlORCIpCgpzdW1tYXJ5KHJfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlIRUFSVF9NSU5EKQpgYGAKCmBgYHtyfQpyZWd0YWJfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmIDwtIGRpZmZfcmVnX3RhYmxlX2Z1bigKICByZWdfbGlzdCA9IGxpc3Qocl9kM180Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWUhFQVJUX01JTkQpLAogIHBhaXJfbGlzdCA9ICJCT0RZLUhFQVJUIC0gTUlORCIsCiAgc3R1ZHlfbmFtZSA9ICJDaGlsZHJlbiwgNC02eSAodXNpbmcgdGhlaXIgb3duIHNjYWxlcywgMi1mYWN0b3Igc29sdXRpb24pIiwKICBjaGFyX2xhYmVsID0gYygiRWxlcGhhbnQgdnMuIEdNIiwgIkdvYXQgdnMuIEdNIiwgIk1vdXNlIHZzLiBHTSIsCiAgICAgICAgICAgICAgICAgIkJpcmQgdnMuIEdNIiwgIkJlZXRsZSB2cy4gR00iLCAiVGVkZHkgYmVhciB2cy4gR00iLAogICAgICAgICAgICAgICAgICJEb2xsIHZzLiBHTSIsICJSb2JvdCB2cy4gR00iKSkKYGBgCgpgYGB7cn0KIyBpbnRlcmltIHRhYmxlIGZvciBlYXNlIG9mIHdyaXRpbmcKcmVndGFiX2QzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUKICBzZWxlY3QoLXN0dWR5LCAtcy5lLikgJT4lCiAgZmlsdGVyKHBhcmFtID09ICJJbnRlcmNlcHQiKSAlPiUKICBrYWJsZShkaWdpdHMgPSAyKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuNH0KIyBpbnRlcmltIHBsb3QgZm9yIGVhc2Ugb2Ygd3JpdGluZwpwbG90X2QzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZgpgYGAKClZpc3VhbGl6YXRpb25zIG9mIHJlbGF0aW9uc2hpcHMgYW1vbmcgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbidzIHNjb3JlcyBvbiB0aGUgX0JPRFktSEVBUlRfIGFuZCBfTUlORF8gc2NhbGVzIGFyZSBwcm92aWRlZCBpbiBGaWd1cmUgQi54eCwgcm93IEIuIFRoZSByZXN1bHRzIG9mIGEgQmF5ZXNpYW4gcmVncmVzc2lvbiBjb21wYXJpbmcgZGlmZmVyZW5jZSBzY29yZXMgYmV0d2VlbiBjb25jZXB0dWFsIHVuaXRzIHRvIHplcm8sIGNvbnRyb2xsaW5nIGZvciBkaWZmZXJlbmNlcyBpbiBhc3Nlc3NtZW50cyBvZiB0aGUgbmluZSAiZGl2ZXJzZSBjaGFyYWN0ZXJzIiB0aGF0IHdlcmUgZmVhdHVyZWQgYXMgdGFyZ2V0IGNoYXJhY3RlcnMgaW4gdGhlc2Ugc3R1ZGllcywgYXJlIHByb3ZpZGVkIGluIFRhYmxlIEIueHguCgpUaGUgbWFpbiB0YWtlLWF3YXkgb2YgdGhpcyBhbmFseXNpcyBpcyB0aGF0IDQtIHRvIDYteWVhci1vbGQgY2hpbGRyZW4gcmVsaWFibHkgZW5kb3JzZWQgX0JPRFktSEVBUlRfIGl0ZW1zIG1vcmUgc3Ryb25nbHkgdGhhbiBfTUlORF8gaXRlbXMuCgojIyMgRGlzY3Vzc2lvbgoKYGBge3J9CmFsdHNjYWxlc19zdHVkeTMgPC0gYmluZF9yb3dzKAogIHNjYWxlc19lZmFfd2RtX2QzX2FkICU+JSAKICAgIG11dGF0ZShzdHVkeSA9ICJBZHVsdHMiKSwKICBzY2FsZXNfZWZhX3dkbV9kM183OSAlPiUgCiAgICBtdXRhdGUoc3R1ZHkgPSAiT2xkZXIgY2hpbGRyZW4sIDctOXkiKSwKICBzY2FsZXNfZWZhX3dkbV9kM180NiAlPiUKICAgIG11dGF0ZShzdHVkeSA9ICJZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICgzLWZhY3RvciBzb2x1dGlvbikiKSwKICBzY2FsZXNfZWZhX3Bhcl9kM180NiAlPiUKICAgIG11dGF0ZShzdHVkeSA9ICJZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICgyLWZhY3RvciBzb2x1dGlvbikiKSkgJT4lCiAgc2VsZWN0KC1jKGxvYWRpbmcsIG9yZGVyKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSBmYWN0b3Ioc3R1ZHksCiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkFkdWx0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9sZGVyIGNoaWxkcmVuLCA3LTl5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMy1mYWN0b3Igc29sdXRpb24pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMi1mYWN0b3Igc29sdXRpb24pIikpKSAlPiUKICBzcHJlYWQoc3R1ZHksIGZhY3RvcikgJT4lCiAgbXV0YXRlKHVyX2ZhY3RvciA9IGlmZWxzZSghaXMubmEoYEFkdWx0c2ApLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBBZHVsdHNgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSghaXMubmEoYE9sZGVyIGNoaWxkcmVuLCA3LTl5YCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBPbGRlciBjaGlsZHJlbiwgNy05eWAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGlzLm5hKGBZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICgzLWZhY3RvciBzb2x1dGlvbilgKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICgzLWZhY3RvciBzb2x1dGlvbilgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMi1mYWN0b3Igc29sdXRpb24pYCkpKSkgJT4lCiAgbGVmdF9qb2luKHNjYWxlc19lZmFfd2RtX2QzX2FkICU+JSAKICAgICAgICAgICAgICBzZWxlY3QoY2FwYWNpdHksIG9yZGVyKSAlPiUgcmVuYW1lKG9yZGVyX2FkID0gb3JkZXIpKSAlPiUKICBsZWZ0X2pvaW4oc2NhbGVzX2VmYV93ZG1fZDNfNzkgJT4lIAogICAgICAgICAgICAgIHNlbGVjdChjYXBhY2l0eSwgb3JkZXIpICU+JSByZW5hbWUob3JkZXJfNzkgPSBvcmRlcikpICU+JQogIGFycmFuZ2UodXJfZmFjdG9yLCBvcmRlcl9hZCwgb3JkZXJfNzkpICU+JQogIHNlbGVjdCgtYyh1cl9mYWN0b3IsIHN0YXJ0c193aXRoKCJvcmRlciIpKSkKYGBgCgpgYGB7cn0KdGFibGVCLjEgPC0gYWx0c2NhbGVzX3N0dWR5MyAlPiUKICBtdXRhdGVfYWxsKGFzLmNoYXJhY3RlcikgJT4lCiAgIyBkZWFsIHdpdGggeW91bmdlciBjaGlsZHJlbiwgMi1mYWN0b3Igc29sdXRpb24KICBtdXRhdGUodGVtcDEgPSBgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMi1mYWN0b3Igc29sdXRpb24pYCwKICAgICAgICAgdGVtcDIgPSBnc3ViKCJcXCoiLCAiIiwgdGVtcDEpLAogICAgICAgICB0ZW1wMyA9IGNhc2Vfd2hlbigKICAgICAgICAgICB0ZW1wMiA9PSBgQWR1bHRzYCB8IAogICAgICAgICAgICAgdGVtcDIgPT0gYE9sZGVyIGNoaWxkcmVuLCA3LTl5YCB+ICLinJMiLAogICAgICAgICAgIGlzLm5hKHRlbXAyKSB+ICIiLAogICAgICAgICAgIFRSVUUgfiB0ZW1wMSkpICU+JQogIG11dGF0ZShgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMi1mYWN0b3Igc29sdXRpb24pYCA9IHRlbXAzKSAlPiUKICBzZWxlY3QoLXN0YXJ0c193aXRoKCJ0ZW1wIikpICU+JQogICMgZGVhbCB3aXRoIHlvdW5nZXIgY2hpbGRyZW4sIDMtZmFjdG9yIHNvbHV0aW9uCiAgbXV0YXRlKHRlbXAxID0gYFlvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDMtZmFjdG9yIHNvbHV0aW9uKWAsCiAgICAgICAgIHRlbXAyID0gZ3N1YigiXFwqIiwgIiIsIHRlbXAxKSwKICAgICAgICAgdGVtcDMgPSBjYXNlX3doZW4oCiAgICAgICAgICAgdGVtcDIgPT0gYEFkdWx0c2AgfCAKICAgICAgICAgICAgIHRlbXAyID09IGBPbGRlciBjaGlsZHJlbiwgNy05eWAgfAogICAgICAgICAgICAgKGlzLm5hKGBBZHVsdHNgKSAmIGlzLm5hKGBPbGRlciBjaGlsZHJlbiwgNy05eWApKSB+ICLinJMiLAogICAgICAgICAgIGlzLm5hKHRlbXAyKSB+ICIiLAogICAgICAgICAgIFRSVUUgfiB0ZW1wMSkpICU+JQogIG11dGF0ZShgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMy1mYWN0b3Igc29sdXRpb24pYCA9IHRlbXAzKSAlPiUKICBzZWxlY3QoLXN0YXJ0c193aXRoKCJ0ZW1wIikpICU+JQogIG11dGF0ZV9hdCh2YXJzKGBBZHVsdHNgLCBgT2xkZXIgY2hpbGRyZW4sIDctOXlgKSwKICAgICAgICAgICAgZnVucyhpZmVsc2UoaXMubmEoLiksICIiLCAi4pyTIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiWW91bmdlciIpKSwKICAgICAgICAgICAgZnVucyhpZmVsc2UoaXMubmEoLiksICIiLCAuKSkpICU+JQogIHJlbmFtZShDYXBhY2l0eSA9IGNhcGFjaXR5LAogICAgICAgICBgMy1mYWN0b3Igc29sdXRpb25gID0gYFlvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDMtZmFjdG9yIHNvbHV0aW9uKWAsCiAgICAgICAgIGAyLWZhY3RvciBzb2x1dGlvbmAgPSBgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMi1mYWN0b3Igc29sdXRpb24pYCkgJT4lCiAga2FibGUoZm9ybWF0ID0gImh0bWwiLAogICAgICAgIGNhcHRpb24gPSAiVGFibGUgQi4xOiBTY2FsZXMgZm9yIGVhY2ggb2YgdGhlIGNvbmNlcHR1YWwgdW5pdHMgKGZhY3RvcnMpIGlkZW50aWZpZWQgYnkgRUZBIGZvciBVUyBBZHVsdHMsIG9sZGVyIGNoaWxkcmVuLCBhbmQgeW91bmdlciBjaGlsZHJlbiBpbiBTdHVkeSAzIChzZWUgQ2hhcHRlciBJSUkpLiBGb3IgeW91bmdlciBjaGlsZHJlbiwgdGhpcyBpbmNsdWRlcyBzY2FsZXMgZm9yIGJvdGggdGhyZWUtIGFuZCB0d28tZmFjdG9yIEVGQSBzb2x1dGlvbnMuIEEgY2hlY2ttYXJrIGluZGljYXRlcyB0aGF0IGEgbWVudGFsIGNhcGFjaXR5IHdhcyBpbmNsdWRlZCBpbiBhIHNjYWxlIGZvciBhIHBhcnRpY3VsYXIgc2FtcGxlLiBUaGUgY29uY2VwdHVhbCB1bml0cyBvZiB5b3VuZ2VyIGNoaWxkcmVuIGRpZmZlcmVkIHN1YnN0YW50aWFsbHkgZnJvbSB0aG9zZSBvZiBvbGRlciBjaGlsZHJlbiBhbmQgYWR1bHRzLCBzdWNoIHRoYXQgc29tZSBtZW50YWwgY2FwYWNpdGllcyB3ZXJlIGluY2x1ZGVkIGluIGRpZmZlcmVudCBzY2FsZXMgYWNyb3NzIGFnZSBncm91cHMgKGUuZy4sIGZlZWwgc2NhcmVkIHdhcyBwYXJ0IG9mIHRoZSBCT0RZIHNjYWxlIGZvciBvbGRlciBjaGlsZHJlbiBhbmQgYWR1bHRzLCBidXQgcGFydCBvZiB0aGUgSEVBUlQqIHNjYWxlIGZvciB5b3VuZ2VyIGNoaWxkcmVuKS4gSW4gdGhlc2UgY2FzZXMsIHRoZSBuYW1lIG9mIHRoZSBzY2FsZSBpcyBwcm92aWRlZCAocmF0aGVyIHRoYW4gYSBjaGVja21hcmspLiIpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJCT0RZIHNjYWxlIiwgMSwgNykgJT4lCiAgZ3JvdXBfcm93cygiSEVBUlQgc2NhbGUiLCA4LCAxNCkgJT4lCiAgZ3JvdXBfcm93cygiTUlORCBzY2FsZSIsIDE1LCAyMCkgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIiA9IDMsCiAgICAgICAgICAgICAgICAgICAgICJZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5IiA9IDIpKQpgYGAKCmBgYHtyIHRhYmxlQi4xLCBpbmNsdWRlID0gVH0KdGFibGVCLjEKYGBgCgpgYGB7cn0KZmlndXJlQi4xIDwtIHBsb3RfZ3JpZChmaWdfZDNfNzlfc2NvcmVkXzc5X3Bsb3RzX2xlZ190aXRsZSwgCiAgICAgICAgICAgICAgICAgICAgICAgZmlnX2QzXzQ2X3Njb3JlZF80Nl93ZG1fcGxvdHNfbGVnX3RpdGxlLAogICAgICAgICAgICAgICAgICAgICAgIGZpZ19kM180Nl9zY29yZWRfNDZfcGFyX3Bsb3RzX2xlZ190aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSkKCmZpZ3VyZUIuMV9jYXAgPC0gYWRkX3N1YihmaWd1cmVCLjEsIHN0cl93cmFwKCJGaWd1cmUgQi4xOiBSZWxhdGlvbnNoaXBzIGFtb25nIG9sZGVyIGFuZCB5b3VuZ2VyIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIGNvbmNlcHR1YWwgdW5pdHMgaW4gU3R1ZHkgMywgc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMgKHNlZSBUYWJsZSBCLjEpLiBGb3IgeW91bmdlciBjaGlsZHJlbiAoNC02eSBvZiBhZ2UpLCB0d28gc2V0cyBvZiBzY29yZXMgYXJlIHByZXNlbnRlZDogdXNpbmcgYSB0aHJlZS1mYWN0b3IgRUZBIHNvbHV0aW9uIChCMS1CMykgYW5kIHVzaW5nIGEgdHdvLWZhY3RvciBFRkEgc29sdXRpb24gKEMxKS4gUGxvdHMgYXJlIG9yZ2FuaXplZCBieSBzYW1wbGUgYW5kIHNjYWxlIHVzZWQgKHJvd3MpIGFuZCBieSBwYWlyIG9mIGNvbmNlcHR1YWwgdW5pdHMgKGNvbHVtbnMpLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gSW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgc21hbGwsIHRyYW5zbHVjZW50IGNpcmNsZXMsIGFuZCBtZWFuIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4gVGhlIGRvdHRlZCBsaW5lIGNvcnJlc3BvbmRzIHRvIGVxdWFsIGVuZG9yc2VtZW50cyBvZiB0aGUgdHdvIGNvbmNlcHR1YWwgdW5pdHMgcGxvdHRlZC4iLCAxMTApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDEuNH0KZ2dkcmF3KGZpZ3VyZUIuMV9jYXApCmBgYAoKYGBge3J9CmZpZ3VyZUIuMl9wbG90cyA8LSBwbG90X2dyaWQoCiAgcGxvdF9kM183OV9zY29yZWRfNzlfZGlmZiArCiAgICBsYWJzKHRpdGxlID0gIlN0dWR5IDM6IENoaWxkcmVuLCA3LTl5XG4oc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMpIikgKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICBwbG90X2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiArIAogICAgbGFicyh0aXRsZSA9ICJTdHVkeSAzOiBDaGlsZHJlbiwgNC02eVxuKHNjb3JlZCB1c2luZyB0aGVpciBvd24gc2NhbGVzLCAzLWZhY3RvciBzb2x1dGlvbikiKSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLCAKICBwbG90X2QzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiArIAogICAgbGFicyh0aXRsZSA9ICJTdHVkeSAzOiBDaGlsZHJlbiwgNC02eVxuKHNjb3JlZCB1c2luZyB0aGVpciBvd24gc2NhbGVzLCAyLWZhY3RvciBzb2x1dGlvbikiKSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLCAKICBuY29sID0gMywgcmVsX3dpZHRocyA9IGMoMSwgMSwgMC44KSwKICBsYWJlbHMgPSAiQVVUTyIpCgpmaWd1cmVCLjJfcGxvdHNfbGVnIDwtIHBsb3RfZ3JpZChmaWd1cmVCLjJfcGxvdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9sZWdlbmQocGxvdF9kM183OV9zY29yZWRfNzlfZGlmZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4xKSkKCmZpZ3VyZUIuMl9jYXAgPC0gYWRkX3N1YihmaWd1cmVCLjJfcGxvdHNfbGVnLCBzdHJfd3JhcCgiRmlndXJlIEIuMjogRGlmZmVyZW5jZSBzY29yZXMgYmV0d2VlbiA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuJ3MgYW5kIDQtIHRvIDYteWVhci1vbGQgY2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgb2YgY29uY2VwdHVhbCB1bml0cyBpbiBTdHVkeSAzLCB1c2luZyB0aGVpciBvd24gc2NhbGVzLiBGb3IgeW91bmdlciBjaGlsZHJlbiAoNC02eSBvZiBhZ2UpLCB0aGlzIGluY2x1ZGVzIGRpZmZlcmVuY2Ugc2NvcmVzIHVzaW5nIHRoZSB0aHJlZS1mYWN0b3IgRUZBIHNvbHV0aW9uIChwYW5lbCBCKSBhbmQgZGlmZmVyZW5jZSBzY29yZXMgdXNpbmcgdGhlIHR3by1mYWN0b3Igc29sdXRpb24gKHBhbmVsIEM7IHNlZSBUYWJsZSBCLjEpLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMSwgc3VjaCB0aGF0IGRpZmZlcmVuY2Ugc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gLTEgdG8gKzEuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBkaWZmZXJlbmNlIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4gVGhlIGRvdHRlZCBsaW5lIGNvcnJlc3BvbmRzIHRvIGVxdWFsIGVuZG9yc2VtZW50cyBvZiB0aGUgdHdvIGNvbmNlcHR1YWwgdW5pdHMgcGxvdHRlZCAoaS5lLiwgYSBkaWZmZXJlbmNlIHNjb3JlIG9mIDApLiIsIDE4MCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA4LCBmaWcuYXNwID0gMC4zOH0KZ2dkcmF3KGZpZ3VyZUIuMl9jYXApCmBgYAoKIyMgU3R1ZHkgNAoKIyMjIFlvdW5nZXIgY2hpbGRyZW4gKDQtNnkpLCB1c2luZyB0aGVpciBvd24gc2NhbGVzICh0aHJlZS1mYWN0b3Igc29sdXRpb24pCgojIyMjIFNjYWxlIGNvbnN0cnVjdGlvbgoKYGBge3J9CnNjYWxlc19lZmFfcGFyX2Q0XzQ2IDwtIHNjYWxlX2Z1bihlZmFfcGFyX2Q0XzQ2LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lcyA9IGZhY3Rvcl9uYW1lc19lZmFfcGFyX2Q0XzQ2KQpzYXZlUkRTKHNjYWxlc19lZmFfcGFyX2Q0XzQ2LCBmaWxlID0gIi4vc3RvcmVkL3NjYWxlcy9zY2FsZXNfZWZhX3Bhcl9kNF80NiIpCgpkNF80Nl9zY29yZWRfNDZfcGFyIDwtIHNjb3JlX2Z1bihkNF80Niwgc2NhbGVzX2VmYV9wYXJfZDRfNDYpCnNhdmVSRFMoZDRfNDZfc2NvcmVkXzQ2X3BhciwgZmlsZSA9ICIuL3N0b3JlZC9zY29yZWRfZGF0YS9kNF80Nl9zY29yZWRfNDZfcGFyIikKYGBgCgpGb2xsb3dpbmcgdGhlIHN0ZXBzIGRlc2NyaWJlZCBpbiAiR2VuZXJhbCBhbmFseXNpcyBwbGFuLCIgYWJvdmUsIHlpZWxkZWQgYHIgZmFjdF9uYW1lX2Z1bihmYWN0b3JfbmFtZXNfZWZhX3Bhcl9kNF80NilgIHNjYWxlcyBvZiBgciBzY2FsZXNfZWZhX3Bhcl9kNF80NiAlPiUgY291bnQoZmFjdG9yKSAlPiUgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKG4pKSAlPiUgc2VsZWN0KG1lYW4pICU+JSBhcy5udW1lcmljKClgIGl0ZW1zIGVhY2g7IHNlZSBUYWJsZSBCLjEuCgojIyMjIFZpc3VhbGl6YXRpb24gYW5kIGFuYWx5c2lzIG9mIGFzeW1tZXRyaWVzCgpgYGB7cn0KcGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3BhciA8LSByZWx2aXpfZnVuKGQ0XzQ2X3Njb3JlZF80Nl9wYXIsIGNvbG9ycyA9IGNvbG9yczAyKQpgYGAKCmBgYHtyfQpmaWdfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9wbG90cyA8LSBwbG90X2dyaWQoCiAgcGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3BhcltbMV1dICsgCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogIHBsb3RzX2Q0XzQ2X3Njb3JlZF80Nl9wYXJbWzJdXSArIAogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICBwbG90c19kNF80Nl9zY29yZWRfNDZfcGFyW1szXV0gKyAKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgbGFiZWxzID0gYygiQTEiLCAiQTIiLCAiQTMiKSwgbmNvbCA9IDMpCgpmaWdfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9sZWcgPC0gZ2V0X2xlZ2VuZCgKICBwbG90c19kNF80Nl9zY29yZWRfNDZfcGFyW1sxXV0gKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsIGxlZ2VuZC5kaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjb2xvcnMwMiwKICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAyKSkgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwKICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjb2xvcnMwMiwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpKSkKCmZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoCiAgZmlnX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfcGxvdHMsIGZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfdGl0bGUgPC0gZ2dkcmF3KCkgKyAKICBkcmF3X2xhYmVsKCJTdHVkeSA0OiBDaGlsZHJlbiwgNC02eSAodXNpbmcgdGhlaXIgb3duIHNjYWxlcywgMy1mYWN0b3Igc29sdXRpb24pIiwgc2l6ZSA9IDE2LCBmb250ZmFjZSA9ICdib2xkJywgeCA9IDAsIGhqdXN0ID0gMCkKCmZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX3Bsb3RzX2xlZ190aXRsZSA8LSBwbG90X2dyaWQoCiAgZmlnX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfdGl0bGUsIGZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX3Bsb3RzX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDAuMTIsIDEpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC40fQojIGludGVyaW0gcGxvdCBmb3IgZWFzZSBvZiB3cml0aW5nCmZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX3Bsb3RzX2xlZ190aXRsZQpgYGAKCmBgYHtyfQpkNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgPC0gZGlmZl9mdW4oZDRfNDZfc2NvcmVkXzQ2X3BhcikKY29udHJhc3RzKGQ0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiRjaGFyYWN0ZXIpIDwtIGNvbnRyYXN0c19zdW1fZWRnZQoKc2F2ZVJEUyhkNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYsICIuL3N0b3JlZC9kaWZmc2NvcmVfZGF0YS9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYiKQpgYGAKCmBgYHtyfQpwbG90X2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiA8LSBkaWZmcGxvdF9mdW4oZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmLCBjb2xvcnMgPSBjb2xvcnMwMikKYGBgCgpgYGB7cn0KIyByX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZX0hFQVJUIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgY2hhcmFjdGVyLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAojICAgY29yZXMgPSA0KQojIAojIHNhdmVSRFMocl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9IRUFSVCwKIyAgICAgICAgICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZX0hFQVJUIikKCnJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlfSEVBUlQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9IRUFSVCIpCgpzdW1tYXJ5KHJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgY2hhcmFjdGVyLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiMgICBjb3JlcyA9IDQpCiMgCiMgc2F2ZVJEUyhyX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZX01JTkQsCiMgICAgICAgICAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9NSU5EIikKCnJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlfTUlORCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZX01JTkQiKQoKc3VtbWFyeShyX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfSEVBUlRfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArIGNoYXJhY3RlciwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvcmVzID0gNCkKIyAKIyBzYXZlUkRTKHJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0hFQVJUX01JTkQsCiMgICAgICAgICAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfSEVBUlRfTUlORCIpCgpyX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9IRUFSVF9NSU5EIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0hFQVJUX01JTkQiKQoKc3VtbWFyeShyX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9IRUFSVF9NSU5EKQpgYGAKCmBgYHtyfQpyZWd0YWJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmIDwtIGRpZmZfcmVnX3RhYmxlX2Z1bigKICByZWdfbGlzdCA9IGxpc3Qocl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9IRUFSVCwKICAgICAgICAgICAgICAgICAgcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9NSU5ELAogICAgICAgICAgICAgICAgICByX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9IRUFSVF9NSU5EKSwKICBwYWlyX2xpc3QgPSBjKCJCT0RZIC0gSEVBUlQiLCAiQk9EWSAtIE1JTkQiLCAiSEVBUlQgLSBNSU5EIiksCiAgc3R1ZHlfbmFtZSA9ICJDaGlsZHJlbiwgNC02eSAodXNpbmcgdGhlaXIgb3duIHNjYWxlcywgMy1mYWN0b3Igc29sdXRpb24pIiwKICBjaGFyX2xhYmVsID0gYygiUm9ib3QgdnMuIEdNIikpCmBgYAoKYGBge3J9CiMgaW50ZXJpbSB0YWJsZSBmb3IgZWFzZSBvZiB3cml0aW5nCnJlZ3RhYl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lCiAgc2VsZWN0KC1zdHVkeSwgLXMuZS4pICU+JQogIGZpbHRlcihwYXJhbSA9PSAiSW50ZXJjZXB0IikgJT4lCiAga2FibGUoZGlnaXRzID0gMikgJT4lCiAga2FibGVfc3R5bGluZygpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjR9CiMgaW50ZXJpbSBwbG90IGZvciBlYXNlIG9mIHdyaXRpbmcKcGxvdF9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYKYGBgCgpWaXN1YWxpemF0aW9ucyBvZiByZWxhdGlvbnNoaXBzIGFtb25nIDQtIHRvIDYteWVhci1vbGQgY2hpbGRyZW4ncyBzY29yZXMgb24gdGhlIF9CT0RZXywgX0hFQVJUXywgYW5kIF9NSU5EXyBzY2FsZXMgYXJlIHByb3ZpZGVkIGluIEZpZ3VyZSBCLnh4LCByb3cgQS4gVGhlIHJlc3VsdHMgb2YgQmF5ZXNpYW4gcmVncmVzc2lvbnMgY29tcGFyaW5nIGRpZmZlcmVuY2Ugc2NvcmVzIGJldHdlZW4gY29uY2VwdHVhbCB1bml0cyB0byB6ZXJvLCBjb250cm9sbGluZyBmb3IgZGlmZmVyZW5jZXMgaW4gYXNzZXNzbWVudHMgb2YgdGhlIHR3byAiZWRnZSBjYXNlcyIgdGhhdCB3ZXJlIGZlYXR1cmVkIGFzIHRhcmdldCBjaGFyYWN0ZXJzIGluIHRoZXNlIHN0dWRpZXMsIGFyZSBwcm92aWRlZCBpbiBUYWJsZSBCLnh4LgoKSW4gdGhlc2UgcmVncmVzc2lvbnMsIG5vbmUgb2YgdGhlIGFzeW1tZXRyaWVzIGJldHdlZW4gY29uY2VwdHVhbCB1bml0cyB3ZXJlIHJlbGlhYmx5IGRpc3Rpbmd1aXNoYWJsZSBmcm9tIHplcm8uCgojIyMgWW91bmdlciBjaGlsZHJlbiAoNC02eSksIHVzaW5nIHRoZWlyIG93biBzY2FsZXMgKGZvdXItZmFjdG9yIHNvbHV0aW9uKQoKIyMjIyBTY2FsZSBjb25zdHJ1Y3Rpb24KCmBgYHtyfQpzY2FsZXNfZWZhX3dkbV9kNF80NiA8LSBzY2FsZV9mdW4oZWZhX3dkbV9kNF80NiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXMgPSBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kNF80NikKc2F2ZVJEUyhzY2FsZXNfZWZhX3dkbV9kNF80NiwgZmlsZSA9ICIuL3N0b3JlZC9zY2FsZXMvc2NhbGVzX2VmYV93ZG1fZDRfNDYiKQoKZDRfNDZfc2NvcmVkXzQ2X3dkbSA8LSBzY29yZV9mdW4oZDRfNDYsIHNjYWxlc19lZmFfd2RtX2Q0XzQ2KQpzYXZlUkRTKGQ0XzQ2X3Njb3JlZF80Nl93ZG0sIGZpbGUgPSAiLi9zdG9yZWQvc2NvcmVkX2RhdGEvZDRfNDZfc2NvcmVkXzQ2X3dkbSIpCmBgYAoKRm9sbG93aW5nIHRoZSBzdGVwcyBkZXNjcmliZWQgaW4gIkdlbmVyYWwgYW5hbHlzaXMgcGxhbiwiIGFib3ZlLCB5aWVsZGVkIGByIGZhY3RfbmFtZV9mdW4oZmFjdG9yX25hbWVzX2VmYV93ZG1fZDRfNDYpYCBzY2FsZXMgb2YgYHIgc2NhbGVzX2VmYV93ZG1fZDRfNDYgJT4lIGNvdW50KGZhY3RvcikgJT4lIHN1bW1hcmlzZShtZWFuID0gbWVhbihuKSkgJT4lIHNlbGVjdChtZWFuKSAlPiUgYXMubnVtZXJpYygpYCBpdGVtcyBlYWNoOyBzZWUgVGFibGUgQi4xLgoKIyMjIyBWaXN1YWxpemF0aW9uIGFuZCBhbmFseXNpcyBvZiBhc3ltbWV0cmllcwoKYGBge3J9CnBsb3RzX2Q0XzQ2X3Njb3JlZF80Nl93ZG0gPC0gcmVsdml6X2Z1bihkNF80Nl9zY29yZWRfNDZfd2RtLCBjb2xvcnMgPSBjb2xvcnMwMikKYGBgCgpgYGB7cn0KZmlnX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fcGxvdHMgPC0gcGxvdF9ncmlkKAogIHBsb3RzX2Q0XzQ2X3Njb3JlZF80Nl93ZG1bWzFdXSArIAogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICBwbG90c19kNF80Nl9zY29yZWRfNDZfd2RtW1syXV0gKyAKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgcGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3dkbVtbM11dICsgCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogIHBsb3RzX2Q0XzQ2X3Njb3JlZF80Nl93ZG1bWzRdXSArIAogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICBwbG90c19kNF80Nl9zY29yZWRfNDZfd2RtW1s1XV0gKyAKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgcGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3dkbVtbNl1dICsgCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogIGxhYmVscyA9IHBhc3RlMCgiQyIsIDE6NiksIG5jb2wgPSAzKQoKZmlnX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fbGVnIDwtIGdldF9sZWdlbmQoCiAgcGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3dkbVtbMV1dICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCBsZWdlbmQuZGlyZWN0aW9uID0gImhvcml6b250YWwiKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIAogICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gY29sb3JzMDIsCiAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMikpICsKICAgIHNjYWxlX2NvbG9yX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsCiAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gY29sb3JzMDIsCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAyKSkpCgpmaWdfZDRfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWcgPC0gcGxvdF9ncmlkKAogIGZpZ19kNF80Nl9zY29yZWRfNDZfd2RtX3Bsb3RzLCBmaWdfZDRfNDZfc2NvcmVkXzQ2X3dkbV9sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjA1KSkKCmZpZ19kNF80Nl9zY29yZWRfNDZfd2RtX3RpdGxlIDwtIGdnZHJhdygpICsgCiAgZHJhd19sYWJlbCgiU3R1ZHkgNDogQ2hpbGRyZW4sIDQtNnkgKHVzaW5nIHRoZWlyIG93biBzY2FsZXMsIDQtZmFjdG9yIHNvbHV0aW9uKSIsIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDRfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGZpZ19kNF80Nl9zY29yZWRfNDZfd2RtX3RpdGxlLCBmaWdfZDRfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuN30KIyBpbnRlcmltIHBsb3QgZm9yIGVhc2Ugb2Ygd3JpdGluZwpmaWdfZDRfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWdfdGl0bGUKYGBgCgpgYGB7cn0KZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmIDwtIGRpZmZfZnVuKGQ0XzQ2X3Njb3JlZF80Nl93ZG0pCmNvbnRyYXN0cyhkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYkY2hhcmFjdGVyKSA8LSBjb250cmFzdHNfc3VtX2VkZ2UKCnNhdmVSRFMoZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmLCAiLi9zdG9yZWQvZGlmZnNjb3JlX2RhdGEvZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmIikKYGBgCgpgYGB7cn0KcGxvdF9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiwgY29sb3JzID0gY29sb3JzMDIpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9CT0RZb3RoZXIgPC0gYnJtKAojICAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAobmF1c2VhKSAtIEJPRFkgKG90aGVyKSIpLAojICAgY29yZXMgPSA0KQojIAojIHNhdmVSRFMocl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9CT0RZb3RoZXIsCiMgICAgICAgICAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9CT0RZb3RoZXIiKQoKcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9CT0RZb3RoZXIgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9CT0RZb3RoZXIiKQoKc3VtbWFyeShyX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX0JPRFlvdGhlcikKYGBgCgpgYGB7cn0KIyByX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX0hFQVJUIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgY2hhcmFjdGVyLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG5hdXNlYSkgLSBIRUFSVCoiKSwKIyAgIGNvcmVzID0gNCkKIyAKIyBzYXZlUkRTKHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFluYXVzZWFfSEVBUlQsCiMgICAgICAgICAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9IRUFSVCIpCgpyX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX0hFQVJUIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFluYXVzZWFfSEVBUlQiKQoKc3VtbWFyeShyX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX0hFQVJUKQpgYGAKCmBgYHtyfQojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9IRUFSVCA8LSBicm0oCiMgICBkaWZmIH4gMSArIGNoYXJhY3RlciwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIChvdGhlcikgLSBIRUFSVCoiKSwKIyAgIGNvcmVzID0gNCkKIyAKIyBzYXZlUkRTKHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9IRUFSVCwKIyAgICAgICAgICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZb3RoZXJfSEVBUlQiKQoKcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW90aGVyX0hFQVJUIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9IRUFSVCIpCgpzdW1tYXJ5KHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAobmF1c2VhKSAtIE1JTkQqIiksCiMgICBjb3JlcyA9IDQpCiMgCiMgc2F2ZVJEUyhyX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX01JTkQsCiMgICAgICAgICAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9NSU5EIikKCnJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFluYXVzZWFfTUlORCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX01JTkQiKQoKc3VtbWFyeShyX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW90aGVyX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAob3RoZXIpIC0gTUlORCoiKSwKIyAgIGNvcmVzID0gNCkKIyAKIyBzYXZlUkRTKHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9NSU5ELAojICAgICAgICAgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9NSU5EIikKCnJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9NSU5EIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9NSU5EIikKCnN1bW1hcnkocl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW90aGVyX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfSEVBUlRfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArIGNoYXJhY3RlciwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCogLSBNSU5EKiIpLAojICAgY29yZXMgPSA0KQojIAojIHNhdmVSRFMocl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfSEVBUlRfTUlORCwKIyAgICAgICAgICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9IRUFSVF9NSU5EIikKCnJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0hFQVJUX01JTkQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfSEVBUlRfTUlORCIpCgpzdW1tYXJ5KHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0hFQVJUX01JTkQpCmBgYAoKYGBge3J9CnJlZ3RhYl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgPC0gZGlmZl9yZWdfdGFibGVfZnVuKAogIHJlZ19saXN0ID0gbGlzdChyX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX0JPRFlvdGhlciwKICAgICAgICAgICAgICAgICAgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9IRUFSVCwKICAgICAgICAgICAgICAgICAgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW90aGVyX0hFQVJULAogICAgICAgICAgICAgICAgICByX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX01JTkQsCiAgICAgICAgICAgICAgICAgIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9NSU5ELAogICAgICAgICAgICAgICAgICByX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9IRUFSVF9NSU5EKSwKICBwYWlyX2xpc3QgPSBjKCJCT0RZIChuYXVzZWEpIC0gQk9EWSAob3RoZXIpIiwKICAgICAgICAgICAgICAgICJCT0RZIChuYXVzZWEpIC0gSEVBUlQqIiwgIkJPRFkgKG90aGVyKSAtIEhFQVJUKiIsCiAgICAgICAgICAgICAgICAiQk9EWSAobmF1c2VhKSAtIE1JTkQiLCAiQk9EWSAob3RoZXIpIC0gTUlORCIsCiAgICAgICAgICAgICAgICAiSEVBUlQqIC0gTUlORCIpLAogIHN0dWR5X25hbWUgPSAiQ2hpbGRyZW4sIDQtNnkgKHVzaW5nIHRoZWlyIG93biBzY2FsZXMsIDQtZmFjdG9yIHNvbHV0aW9uKSIsCiAgY2hhcl9sYWJlbCA9IGMoIlJvYm90IHZzLiBHTSIpKQpgYGAKCmBgYHtyfQojIGludGVyaW0gdGFibGUgZm9yIGVhc2Ugb2Ygd3JpdGluZwpyZWd0YWJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JQogIHNlbGVjdCgtc3R1ZHksIC1zLmUuKSAlPiUKICBmaWx0ZXIocGFyYW0gPT0gIkludGVyY2VwdCIpICU+JQogIGthYmxlKGRpZ2l0cyA9IDIpICU+JQogIGthYmxlX3N0eWxpbmcoKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC40fQojIGludGVyaW0gcGxvdCBmb3IgZWFzZSBvZiB3cml0aW5nCnBsb3RfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmCmBgYAoKVmlzdWFsaXphdGlvbnMgb2YgcmVsYXRpb25zaGlwcyBhbW9uZyA0LSB0byA2LXllYXItb2xkIGNoaWxkcmVuJ3Mgc2NvcmVzIG9uIHRoZSBfQk9EWVwqXywgX0hFQVJUXCpfLCBhbmQgX01JTkRfIHNjYWxlcyBhcmUgcHJvdmlkZWQgaW4gRmlndXJlIEIueHgsIHJvdyBCLiBUaGUgcmVzdWx0cyBvZiBCYXllc2lhbiByZWdyZXNzaW9ucyBjb21wYXJpbmcgZGlmZmVyZW5jZSBzY29yZXMgYmV0d2VlbiBjb25jZXB0dWFsIHVuaXRzIHRvIHplcm8sIGNvbnRyb2xsaW5nIGZvciBkaWZmZXJlbmNlcyBpbiBhc3Nlc3NtZW50cyBvZiB0aGUgbmluZSAiZGl2ZXJzZSBjaGFyYWN0ZXJzIiB0aGF0IHdlcmUgZmVhdHVyZWQgYXMgdGFyZ2V0IGNoYXJhY3RlcnMgaW4gdGhlc2Ugc3R1ZGllcywgYXJlIHByb3ZpZGVkIGluIFRhYmxlIEIueHguCgpUaGUgbWFpbiB0YWtlLWF3YXlzIG9mIHRoaXMgYW5hbHlzaXMgYXJlIHRoYXQgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiByZWxpYWJseSBlbmRvcnNlZCBfQk9EWSAob3RoZXIpXyBpdGVtcyBtb3JlIHN0cm9uZ2x5IHRoYW4gYW55IG90aGVyIGl0ZW1zLCBidXQgc2hvd2VkIG5vIHJlbGlhYmxlIGFzeW1tZXRyaWVzIGJldHdlZW4gdGhlIHJlbWFpbmluZyBjb25jZXB0dWFsIHVuaXRzIChfQk9EWSAobmF1c2VhKV8sIF9IRUFSVFwqXywgYW5kIF9NSU5EXykuCgojIyMgRGlzY3Vzc2lvbgoKYGBge3J9CmFsdHNjYWxlc19zdHVkeTMgPC0gYmluZF9yb3dzKAogIHNjYWxlc19lZmFfd2RtX2Q0X2FkICU+JSAKICAgIG11dGF0ZShzdHVkeSA9ICJBZHVsdHMiKSwKICBzY2FsZXNfZWZhX3Bhcl9kNF80NiAlPiUKICAgIG11dGF0ZShzdHVkeSA9ICJZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICgzLWZhY3RvciBzb2x1dGlvbikiKSwKICBzY2FsZXNfZWZhX3dkbV9kNF80NiAlPiUKICAgIG11dGF0ZShzdHVkeSA9ICJZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICg0LWZhY3RvciBzb2x1dGlvbikiKSkgJT4lCiAgc2VsZWN0KC1jKGxvYWRpbmcsIG9yZGVyKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSBmYWN0b3Ioc3R1ZHksCiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkFkdWx0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDMtZmFjdG9yIHNvbHV0aW9uKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDQtZmFjdG9yIHNvbHV0aW9uKSIpKSkgJT4lCiAgc3ByZWFkKHN0dWR5LCBmYWN0b3IpICU+JQogIG11dGF0ZSh1cl9mYWN0b3IgPSBpZmVsc2UoIWlzLm5hKGBBZHVsdHNgKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgQWR1bHRzYCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoIWlzLm5hKGBZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICgzLWZhY3RvciBzb2x1dGlvbilgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMy1mYWN0b3Igc29sdXRpb24pYCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoNC1mYWN0b3Igc29sdXRpb24pYCkpKSAlPiUKICBsZWZ0X2pvaW4oc2NhbGVzX2VmYV93ZG1fZDRfYWQgJT4lIAogICAgICAgICAgICAgIHNlbGVjdChjYXBhY2l0eSwgb3JkZXIpICU+JSByZW5hbWUob3JkZXJfYWQgPSBvcmRlcikpICU+JQogIGxlZnRfam9pbihzY2FsZXNfZWZhX3Bhcl9kNF80NiAlPiUgCiAgICAgICAgICAgICAgc2VsZWN0KGNhcGFjaXR5LCBvcmRlcikgJT4lIHJlbmFtZShvcmRlcl80Nl9wYXIgPSBvcmRlcikpICU+JQogIGxlZnRfam9pbihzY2FsZXNfZWZhX3dkbV9kNF80NiAlPiUgCiAgICAgICAgICAgICAgc2VsZWN0KGNhcGFjaXR5LCBvcmRlcikgJT4lIHJlbmFtZShvcmRlcl80Nl93ZG0gPSBvcmRlcikpICU+JQogIGFycmFuZ2UodXJfZmFjdG9yLCBvcmRlcl9hZCwgb3JkZXJfNDZfcGFyLCBvcmRlcl80Nl93ZG0pICU+JQogIHNlbGVjdCgtYyh1cl9mYWN0b3IsIHN0YXJ0c193aXRoKCJvcmRlciIpKSkKYGBgCgpgYGB7cn0KdGFibGVCLjIgPC0gYWx0c2NhbGVzX3N0dWR5MyAlPiUKICBtdXRhdGVfYWxsKGFzLmNoYXJhY3RlcikgJT4lCiAgIyBkZWFsIHdpdGggeW91bmdlciBjaGlsZHJlbiwgMy1mYWN0b3Igc29sdXRpb24KICBtdXRhdGUodGVtcDEgPSBgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMy1mYWN0b3Igc29sdXRpb24pYCwKICAgICAgICAgdGVtcDIgPSBnc3ViKCJcXCoiLCAiIiwgdGVtcDEpLAogICAgICAgICB0ZW1wMyA9IGNhc2Vfd2hlbigKICAgICAgICAgICB0ZW1wMiA9PSBgQWR1bHRzYCB+ICLinJMiLAogICAgICAgICAgIGlzLm5hKHRlbXAyKSB+ICIiLAogICAgICAgICAgIFRSVUUgfiB0ZW1wMSkpICU+JQogIG11dGF0ZShgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMy1mYWN0b3Igc29sdXRpb24pYCA9IHRlbXAzKSAlPiUKICBzZWxlY3QoLXN0YXJ0c193aXRoKCJ0ZW1wIikpICU+JQogICMgZGVhbCB3aXRoIHlvdW5nZXIgY2hpbGRyZW4sIDQtZmFjdG9yIHNvbHV0aW9uCiAgbXV0YXRlKHRlbXAxID0gYFlvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDQtZmFjdG9yIHNvbHV0aW9uKWAsCiAgICAgICAgIHRlbXAyID0gZ3N1YigiXFwqIiwgIiIsIHRlbXAxKSwKICAgICAgICAgdGVtcDMgPSBjYXNlX3doZW4oCiAgICAgICAgICAgdGVtcDIgPT0gYEFkdWx0c2AgfCAKICAgICAgICAgICAgIHRlbXAyID09IGBZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICgzLWZhY3RvciBzb2x1dGlvbilgIHwKICAgICAgICAgICAgIChpcy5uYShgQWR1bHRzYCkgJiBpcy5uYShgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMy1mYWN0b3Igc29sdXRpb24pYCkpIH4gIuKckyIsCiAgICAgICAgICAgaXMubmEodGVtcDIpIH4gIiIsCiAgICAgICAgICAgVFJVRSB+IHRlbXAxKSkgJT4lCiAgbXV0YXRlKGBZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICg0LWZhY3RvciBzb2x1dGlvbilgID0gdGVtcDMpICU+JQogIHNlbGVjdCgtc3RhcnRzX3dpdGgoInRlbXAiKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMoYEFkdWx0c2ApLAogICAgICAgICAgICBmdW5zKGlmZWxzZShpcy5uYSguKSwgIiIsICLinJMiKSkpICU+JQogIHJlbmFtZShDYXBhY2l0eSA9IGNhcGFjaXR5LAogICAgICAgICBgNC1mYWN0b3Igc29sdXRpb25gID0gYFlvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDQtZmFjdG9yIHNvbHV0aW9uKWAsCiAgICAgICAgIGAzLWZhY3RvciBzb2x1dGlvbmAgPSBgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMy1mYWN0b3Igc29sdXRpb24pYCkgJT4lCiAga2FibGUoZm9ybWF0ID0gImh0bWwiLAogICAgICAgIGNhcHRpb24gPSAiVGFibGUgQi4yOiBTY2FsZXMgZm9yIGVhY2ggb2YgdGhlIGNvbmNlcHR1YWwgdW5pdHMgKGZhY3RvcnMpIGlkZW50aWZpZWQgYnkgRUZBIGZvciBVUyBBZHVsdHMgYW5kIHlvdW5nZXIgY2hpbGRyZW4gaW4gU3R1ZHkgNCAoc2VlIENoYXB0ZXIgSUlJKS4gRm9yIHlvdW5nZXIgY2hpbGRyZW4sIHRoaXMgaW5jbHVkZXMgc2NhbGVzIGZvciBib3RoIHRocmVlLSBhbmQgZm91ci1mYWN0b3IgRUZBIHNvbHV0aW9ucy4gQSBjaGVja21hcmsgaW5kaWNhdGVzIHRoYXQgYSBtZW50YWwgY2FwYWNpdHkgd2FzIGluY2x1ZGVkIGluIGEgc2NhbGUgZm9yIGEgcGFydGljdWxhciBzYW1wbGUuIFRoZSBjb25jZXB0dWFsIHVuaXRzIG9mIHlvdW5nZXIgY2hpbGRyZW4gaW4gdGhlIGZvdXItZmFjdG9yIHNvbHV0aW9uIGRpZmZlcmVkIHN1YnN0YW50aWFsbHkgZnJvbSB0aG9zZSBvZiBhZHVsdHMsIHN1Y2ggdGhhdCBzb21lIG1lbnRhbCBjYXBhY2l0aWVzIHdlcmUgaW5jbHVkZWQgaW4gZGlmZmVyZW50IHNjYWxlcyBhY3Jvc3MgYWdlIGdyb3Vwcy4gSW4gdGhlc2UgY2FzZXMsIHRoZSBuYW1lIG9mIHRoZSBzY2FsZSBpcyBwcm92aWRlZCAocmF0aGVyIHRoYW4gYSBjaGVja21hcmspLiIpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJCT0RZIHNjYWxlIiwgMSwgNSkgJT4lCiAgZ3JvdXBfcm93cygiSEVBUlQgc2NhbGUiLCA2LCAxMCkgJT4lCiAgZ3JvdXBfcm93cygiTUlORCBzY2FsZSIsIDExLCAxNSkgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIiA9IDIsCiAgICAgICAgICAgICAgICAgICAgICJZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5IiA9IDIpKQpgYGAKCmBgYHtyIHRhYmxlQi4yLCBpbmNsdWRlID0gVH0KdGFibGVCLjIKYGBgCgpgYGB7cn0KZmlndXJlQi4zIDwtIHBsb3RfZ3JpZChmaWdfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9wbG90c19sZWdfdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgZmlnX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fcGxvdHNfbGVnX3RpdGxlLAogICAgICAgICAgICAgICAgICAgICAgIHJlbF9oZWlnaHRzID0gYygxLCAyKSwgbmNvbCA9IDEpCgpmaWd1cmVCLjNfY2FwIDwtIGFkZF9zdWIoZmlndXJlQi4zLCBzdHJfd3JhcCgiRmlndXJlIEIuMzogUmVsYXRpb25zaGlwcyBhbW9uZyB5b3VuZ2VyIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIGNvbmNlcHR1YWwgdW5pdHMgaW4gU3R1ZHkgNCwgc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMgKHNlZSBUYWJsZSBCLjIpLiBUd28gc2V0cyBvZiBzY29yZXMgYXJlIHByZXNlbnRlZDogdXNpbmcgYSB0aHJlZS1mYWN0b3IgRUZBIHNvbHV0aW9uIChBMS1BMykgYW5kIHVzaW5nIGEgZm91ci1mYWN0b3IgRUZBIHNvbHV0aW9uIChCMS1CNikuIFBsb3RzIGFyZSBvcmdhbml6ZWQgYnkgc2FtcGxlIGFuZCBzY2FsZSB1c2VkIChyb3dzKSBhbmQgYnkgcGFpciBvZiBjb25jZXB0dWFsIHVuaXRzIChjb2x1bW5zKS4gRm9yIGVhY2ggY29uY2VwdHVhbCB1bml0LCBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAwLTEuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBzY29yZXMgYnkgY2hhcmFjdGVyIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIFRoZSBkb3R0ZWQgbGluZSBjb3JyZXNwb25kcyB0byBlcXVhbCBlbmRvcnNlbWVudHMgb2YgdGhlIHR3byBjb25jZXB0dWFsIHVuaXRzIHBsb3R0ZWQuIiwgMTEwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAxLjR9CmdnZHJhdyhmaWd1cmVCLjNfY2FwKQpgYGAKCmBgYHtyfQpmaWd1cmVCLjRfcGxvdHMgPC0gcGxvdF9ncmlkKAogIHBsb3RfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmICsgCiAgICBsYWJzKHRpdGxlID0gIlN0dWR5IDQ6IENoaWxkcmVuLCA0LTZ5XG4oc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMsIDMtZmFjdG9yIHNvbHV0aW9uKSIpICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksIAogIHBsb3RfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICsgCiAgICBsYWJzKHRpdGxlID0gIlN0dWR5IDQ6IENoaWxkcmVuLCA0LTZ5XG4oc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMsIDQtZmFjdG9yIHNvbHV0aW9uKSIpICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksIAogIG5jb2wgPSAyLCByZWxfd2lkdGhzID0gYygxLCAyKSwKICBsYWJlbHMgPSAiQVVUTyIpCgpmaWd1cmVCLjRfcGxvdHNfbGVnIDwtIHBsb3RfZ3JpZChmaWd1cmVCLjRfcGxvdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9sZWdlbmQocGxvdF9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMSkpCgpmaWd1cmVCLjRfY2FwIDwtIGFkZF9zdWIoZmlndXJlQi40X3Bsb3RzX2xlZywgc3RyX3dyYXAoIkZpZ3VyZSBCLjQ6IERpZmZlcmVuY2Ugc2NvcmVzIGJldHdlZW4gNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbidzIGF0dHJpYnV0aW9ucyBvZiBjb25jZXB0dWFsIHVuaXRzIGluIFN0dWR5IDQsIHVzaW5nIHRoZWlyIG93biBzY2FsZXMuIFRoaXMgaW5jbHVkZXMgZGlmZmVyZW5jZSBzY29yZXMgdXNpbmcgdGhlIGZvdXItZmFjdG9yIEVGQSBzb2x1dGlvbiAocGFuZWwgQSkgYW5kIGRpZmZlcmVuY2Ugc2NvcmVzIHVzaW5nIHRoZSB0aHJlZS1mYWN0b3Igc29sdXRpb24gKHBhbmVsIEI7IHNlZSBUYWJsZSBCLjIpLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMSwgc3VjaCB0aGF0IGRpZmZlcmVuY2Ugc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gLTEgdG8gKzEuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBkaWZmZXJlbmNlIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4gVGhlIGRvdHRlZCBsaW5lIGNvcnJlc3BvbmRzIHRvIGVxdWFsIGVuZG9yc2VtZW50cyBvZiB0aGUgdHdvIGNvbmNlcHR1YWwgdW5pdHMgcGxvdHRlZCAoaS5lLiwgYSBkaWZmZXJlbmNlIHNjb3JlIG9mIDApLiIsIDE4MCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA4LCBmaWcuYXNwID0gMC4zOH0KZ2dkcmF3KGZpZ3VyZUIuNF9jYXApCmBgYAoKCiMgQWdlLXJlbGF0ZWQgY2hhbmdlcyBpbiBkaWZmZXJlbmNlIHNjb3JlcyBiZXR3ZWVuIGNvbmNlcHR1YWwgdW5pdHMKClhYIF9fQ09OVkVSVCBUTyBCUk1TX18KCiMjIFN0dWR5IDIKCmBgYHtyLCBpbmNsdWRlID0gVH0KZDJfNzlfc2NvcmVkX2FkX2RpZmYgJT4lIAogIGxlZnRfam9pbihkMl83OSAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSkpICU+JQogIGdncGxvdChhZXMoeCA9IGFnZSwgeSA9IGRpZmYsIGNvbG9yID0gY2hhcmFjdGVyKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGx0eSA9IDIpICsKICBmYWNldF93cmFwKH4gcGFpcikgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjUpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JQogICAgICAgICAgICAgICAgICAgIGdyb3VwX2J5KHBhaXIpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gImRpZmYiKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXV0YXRlKGFnZSA9IDExKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciwgY29sb3IgPSBOVUxMKSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaGFwZSA9ICJkaWFtb25kIikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjb2xvcnMwMikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDc6MTEpLCBtaW5vcl9icmVha3MgPSBOVUxMLAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKHBhc3RlMCg3OjEwLCAieSIpLCAiQWR1bHRzIikpICsKICBnZW9tX3Ntb290aChjb2xvciA9ICJibGFjayIsIG1ldGhvZCA9ICJsbSIpICsKICBsYWJzKHRpdGxlID0gIlN0dWR5IDI6IERpZmZlcmVuY2Ugc2NvcmVzIG92ZXIgYWdlIiwKICAgICAgIHggPSAiQWdlICh5KSIsIHkgPSAiRGlmZmVyZW5jZSBzY29yZSIsIGNvbG9yID0gIlRhcmdldCBjaGFyYWN0ZXIiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKQpgYGAKCmBgYHtyfQp0ZW1wX2QyX0JIIDwtIGxtKGRpZmYgfiAxICsgY2hhcmFjdGVyICogYWdlLAogICAgICAgICAgICAgICAgIGRhdGEgPSBkMl83OV9zY29yZWRfYWRfZGlmZiAlPiUKICAgICAgICAgICAgICAgICAgIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSAlPiUKICAgICAgICAgICAgICAgICAgIGxlZnRfam9pbihkMl83OSAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSkpICU+JQogICAgICAgICAgICAgICAgICAgbXV0YXRlKGFnZSA9IHNjYWxlKGFnZSwgc2NhbGUgPSBGKSkpCnN1bW1hcnkodGVtcF9kMl9CSCkkY29lZmZpY2llbnRzICU+JSBrYWJsZShkaWdpdHMgPSAyKSAlPiUga2FibGVfc3R5bGluZygpCgp0ZW1wX2QyX0JNIDwtIGxtKGRpZmYgfiAxICsgY2hhcmFjdGVyICogYWdlLAogICAgICAgICAgICAgICAgIGRhdGEgPSBkMl83OV9zY29yZWRfYWRfZGlmZiAlPiUKICAgICAgICAgICAgICAgICAgIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpICU+JQogICAgICAgICAgICAgICAgICAgbGVmdF9qb2luKGQyXzc5ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSkgJT4lCiAgICAgICAgICAgICAgICAgICBtdXRhdGUoYWdlID0gc2NhbGUoYWdlLCBzY2FsZSA9IEYpKSkKc3VtbWFyeSh0ZW1wX2QyX0JNKSRjb2VmZmljaWVudHMgJT4lIGthYmxlKGRpZ2l0cyA9IDIpICU+JSBrYWJsZV9zdHlsaW5nKCkKCnRlbXBfZDJfSE0gPC0gbG0oZGlmZiB+IDEgKyBjaGFyYWN0ZXIgKiBhZ2UsCiAgICAgICAgICAgICAgICAgZGF0YSA9IGQyXzc5X3Njb3JlZF9hZF9kaWZmICU+JQogICAgICAgICAgICAgICAgICAgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpICU+JQogICAgICAgICAgICAgICAgICAgbGVmdF9qb2luKGQyXzc5ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSkgJT4lCiAgICAgICAgICAgICAgICAgICBtdXRhdGUoYWdlID0gc2NhbGUoYWdlLCBzY2FsZSA9IEYpKSkKc3VtbWFyeSh0ZW1wX2QyX0hNKSRjb2VmZmljaWVudHMgJT4lIGthYmxlKGRpZ2l0cyA9IDIpICU+JSBrYWJsZV9zdHlsaW5nKCkKYGBgCgojIyBTdHVkeSAzCgpgYGB7ciwgaW5jbHVkZSA9IFR9CmQzXzc5X3Njb3JlZF9hZF9kaWZmICU+JSAKICBsZWZ0X2pvaW4oZDNfNzkgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpKSAlPiUKICBmdWxsX2pvaW4oZDNfNDZfc2NvcmVkX2FkX2RpZmYgJT4lCiAgICAgICAgICAgICAgbGVmdF9qb2luKGQzXzQ2ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSkpICU+JQogICMgTk9URTogTUlTU0lORyAzNSBBR0VTISEKICBnZ3Bsb3QoYWVzKHggPSBhZ2UsIHkgPSBkaWZmLCBjb2xvciA9IGNoYXJhY3RlcikpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBsdHkgPSAyKSArCiAgZmFjZXRfd3JhcCh+IHBhaXIpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC41KSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSBkM19hZF9zY29yZWRfYWRfZGlmZiAlPiUKICAgICAgICAgICAgICAgICAgICBncm91cF9ieShwYWlyKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJkaWZmIikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpICU+JQogICAgICAgICAgICAgICAgICAgIG11dGF0ZShhZ2UgPSAxMSksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIsIGNvbG9yID0gTlVMTCksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2hhcGUgPSAiZGlhbW9uZCIpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gY29sb3JzMDkpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gYyg0OjExKSwgbWlub3JfYnJlYWtzID0gTlVMTCwKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYyhwYXN0ZTAoNDoxMCwgInkiKSwgIkFkdWx0cyIpKSArCiAgZ2VvbV9zbW9vdGgoY29sb3IgPSAiYmxhY2siLCBtZXRob2QgPSAibG0iKSArCiAgbGFicyh0aXRsZSA9ICJTdHVkeSAzOiBEaWZmZXJlbmNlIHNjb3JlcyBvdmVyIGFnZSIsCiAgICAgICB4ID0gIkFnZSAoeSkiLCB5ID0gIkRpZmZlcmVuY2Ugc2NvcmUiLCBjb2xvciA9ICJUYXJnZXQgY2hhcmFjdGVyIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkKYGBgCgpgYGB7cn0KdGVtcF9kM19CSCA8LSBsbShkaWZmIH4gMSArIGNoYXJhY3RlciAqIGFnZSwKICAgICAgICAgICAgICAgICBkYXRhID0gZDNfNzlfc2NvcmVkX2FkX2RpZmYgJT4lCiAgICAgICAgICAgICAgICAgICBsZWZ0X2pvaW4oZDNfNzkgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpKSAlPiUKICAgICAgICAgICAgICAgICAgIGZ1bGxfam9pbihkM180Nl9zY29yZWRfYWRfZGlmZiAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRfam9pbihkM180NiAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSkpKSAlPiUKICAgICAgICAgICAgICAgICAgIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSAlPiUKICAgICAgICAgICAgICAgICAgIG11dGF0ZShhZ2UgPSBzY2FsZShhZ2UsIHNjYWxlID0gRikpKQpzdW1tYXJ5KHRlbXBfZDNfQkgpJGNvZWZmaWNpZW50cyAlPiUga2FibGUoZGlnaXRzID0gMikgJT4lIGthYmxlX3N0eWxpbmcoKQoKdGVtcF9kM19CTSA8LSBsbShkaWZmIH4gMSArIGNoYXJhY3RlciAqIGFnZSwKICAgICAgICAgICAgICAgICBkYXRhID0gZDNfNzlfc2NvcmVkX2FkX2RpZmYgJT4lCiAgICAgICAgICAgICAgICAgICBsZWZ0X2pvaW4oZDNfNzkgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpKSAlPiUKICAgICAgICAgICAgICAgICAgIGZ1bGxfam9pbihkM180Nl9zY29yZWRfYWRfZGlmZiAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRfam9pbihkM180NiAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSkpKSAlPiUKICAgICAgICAgICAgICAgICAgIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpICU+JQogICAgICAgICAgICAgICAgICAgbXV0YXRlKGFnZSA9IHNjYWxlKGFnZSwgc2NhbGUgPSBGKSkpCnN1bW1hcnkodGVtcF9kM19CTSkkY29lZmZpY2llbnRzICU+JSBrYWJsZShkaWdpdHMgPSAyKSAlPiUga2FibGVfc3R5bGluZygpCgp0ZW1wX2QzX0hNIDwtIGxtKGRpZmYgfiAxICsgY2hhcmFjdGVyICogYWdlLAogICAgICAgICAgICAgICAgIGRhdGEgPSBkM183OV9zY29yZWRfYWRfZGlmZiAlPiUKICAgICAgICAgICAgICAgICAgIGxlZnRfam9pbihkM183OSAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSkpICU+JQogICAgICAgICAgICAgICAgICAgZnVsbF9qb2luKGQzXzQ2X3Njb3JlZF9hZF9kaWZmICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdF9qb2luKGQzXzQ2ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSkpICU+JQogICAgICAgICAgICAgICAgICAgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpICU+JQogICAgICAgICAgICAgICAgICAgbXV0YXRlKGFnZSA9IHNjYWxlKGFnZSwgc2NhbGUgPSBGKSkpCnN1bW1hcnkodGVtcF9kM19ITSkkY29lZmZpY2llbnRzICU+JSBrYWJsZShkaWdpdHMgPSAyKSAlPiUga2FibGVfc3R5bGluZygpCmBgYAoKIyMgU3R1ZHkgNAoKYGBge3IsIGluY2x1ZGUgPSBUfQpkNF80Nl9zY29yZWRfYWRfZGlmZiAlPiUgCiAgbGVmdF9qb2luKGQ0XzQ2ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWdlLCB5ID0gZGlmZiwgY29sb3IgPSBjaGFyYWN0ZXIpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbHR5ID0gMikgKwogIGZhY2V0X3dyYXAofiBwYWlyKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gZDRfYWRfc2NvcmVkX2FkX2RpZmYgJT4lCiAgICAgICAgICAgICAgICAgICAgZ3JvdXBfYnkocGFpcikgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAiZGlmZiIpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdXRhdGUoYWdlID0gNiksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIsIGNvbG9yID0gTlVMTCksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2hhcGUgPSAiZGlhbW9uZCIpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gY29sb3JzMDIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gYyg0OjYpLCBtaW5vcl9icmVha3MgPSBOVUxMLAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKHBhc3RlMCg0OjUsICJ5IiksICJBZHVsdHMiKSkgKwogIGdlb21fc21vb3RoKGNvbG9yID0gImJsYWNrIiwgbWV0aG9kID0gImxtIikgKwogIGxhYnModGl0bGUgPSAiU3R1ZHkgNDogRGlmZmVyZW5jZSBzY29yZXMgb3ZlciBhZ2UiLAogICAgICAgeCA9ICJBZ2UgKHkpIiwgeSA9ICJEaWZmZXJlbmNlIHNjb3JlIiwgY29sb3IgPSAiVGFyZ2V0IGNoYXJhY3RlciIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpCmBgYAoKYGBge3J9CnRlbXBfZDRfQkggPC0gbG1lcihkaWZmIH4gMSArIGNoYXJhY3RlciAqIGFnZSArICgxIHwgc3ViaWQpLAogICAgICAgICAgICAgICAgICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF9hZF9kaWZmICU+JQogICAgICAgICAgICAgICAgICAgICBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIikgJT4lCiAgICAgICAgICAgICAgICAgICAgIGxlZnRfam9pbihkNF80NiAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSkpICU+JQogICAgICAgICAgICAgICAgICAgICBtdXRhdGUoYWdlID0gc2NhbGUoYWdlLCBzY2FsZSA9IEYpKSkKc3VtbWFyeSh0ZW1wX2Q0X0JIKSRjb2VmZmljaWVudHMgJT4lIGthYmxlKGRpZ2l0cyA9IDIpICU+JSBrYWJsZV9zdHlsaW5nKCkKCnRlbXBfZDRfQk0gPC0gbG1lcihkaWZmIH4gMSArIGNoYXJhY3RlciAqIGFnZSArICgxIHwgc3ViaWQpLAogICAgICAgICAgICAgICAgICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF9hZF9kaWZmICU+JQogICAgICAgICAgICAgICAgICAgICBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSAlPiUKICAgICAgICAgICAgICAgICAgICAgbGVmdF9qb2luKGQ0XzQ2ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSkgJT4lCiAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShhZ2UgPSBzY2FsZShhZ2UsIHNjYWxlID0gRikpKQpzdW1tYXJ5KHRlbXBfZDRfQk0pJGNvZWZmaWNpZW50cyAlPiUga2FibGUoZGlnaXRzID0gMikgJT4lIGthYmxlX3N0eWxpbmcoKQoKdGVtcF9kNF9ITSA8LSBsbWVyKGRpZmYgfiAxICsgY2hhcmFjdGVyICogYWdlICsgKDEgfCBzdWJpZCksCiAgICAgICAgICAgICAgICAgICBkYXRhID0gZDRfNDZfc2NvcmVkX2FkX2RpZmYgJT4lCiAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSAlPiUKICAgICAgICAgICAgICAgICAgICAgbGVmdF9qb2luKGQ0XzQ2ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSkgJT4lCiAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShhZ2UgPSBzY2FsZShhZ2UsIHNjYWxlID0gRikpKQpzdW1tYXJ5KHRlbXBfZDRfSE0pJGNvZWZmaWNpZW50cyAlPiUga2FibGUoZGlnaXRzID0gMikgJT4lIGthYmxlX3N0eWxpbmcoKQpgYGAKCiMgVGhlIGpvaW50IGRlcGVuZGVuY3kgb2YgSEVBUlQgb24gYm90aCBCT0RZIGFuZCBNSU5ECgpBIHBhcnRpY3VsYXJseSByb2J1c3QgYW5kIHJlbGlhYmxlIGZpbmRpbmcgcmVwb3J0ZWQgaW4gdGhlIG1haW4gdGV4dCBvZiBDaGFwdGVyIElWIHdhcyB0aGF0IFVTIGFkdWx0cyB2aXJ0dWFsbHkgbmV2ZXIgZW5kb3JzZWQgSEVBUlQgbW9yZSBzdHJvbmdseSB0aGFuIGVpdGhlciBCT0RZIG9yIE1JTkQuIChVUyBjaGlsZHJlbiBiZXR3ZWVuIHRoZSBhZ2VzIG9mIDQtOXkgYWxzbyBkZW1vbnN0cmF0ZWQgaW5jcmVhc2luZ2x5IGFkdWx0LWxpa2UgYXN5bW1ldHJpZXMgaW4gdGhlaXIgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGF0dHJpYnV0aW9ucyB3aXRoIGFnZS4pIEkgYXJndWVkIGluIHRoYXQgY2hhcHRlciB0aGF0IHRoaXMgcGF0dGVybiBvZiBmaW5kaW5ncyBpcyBjb25zaXRlbnQgd2l0aCB0aGUgcG9zc2liaWxpdHkgdGhhdCBhZHVsdHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMgYXJlIGdvdmVybmVkIGJ5IGFuIGludHVpdGl2ZSB0aGVvcnkgb2YgbWVudGFsIGxpZmUgc3BlY2lmeWluZyB0aGF0LCBpbiBvcmRlciBmb3IgYSBiZWluZyB0byBoYXZlIHRoZSBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyBvZiB0aGUgSEVBUlQsIGl0IG11c3QgYWxzbyBoYXZlIHRoZSBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgb2YgdGhlIEJPRFkgX2FuZF8gdGhlIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcyBvZiB0aGUgbWluZC4gCgpJIGlsbHVzdHJhdGVkIHN1cHBvcnQgZm9yIHRoaXMgaHlwb3RoZXNpcyB3aXRoIGEgdmlzdWFsaXphdGlvbiBvZiBwYXJ0aWNpcGFudHMnIF9CT0RZXywgX0hFQVJUXywgYW5kIF9NSU5EXyBzY29yZXMsIHdoaWNoIGRlbW9uc3RyYXRlZCB0aGF0LCBhbW9uZyBhZHVsdHMgaW4gU3R1ZGllcyAxLTQsIHN0cm9uZyBlbmRvcnNlbWVudHMgb2YgX0hFQVJUXyBhYmlsaXRpZXMgb25seSBvY2N1cnJlZCBhbW9uZyBwYXJ0aWNpcGFudHMgd2hvIGFsc28gZ2F2ZSBzdHJvbmcgZW5kb3JzZW1lbnRzIG9mIF9ib3RoXyBfQk9EWV8gYW5kIF9NSU5EXyBhYmlsaXRpZXMgKHNlZSBGaWd1cmUgNC4xMSwgdG9wIHJvdykuIFRoZXNlIHRlbmRlbmNpZXMgYXBwZWFyZWQgdG8gYmUgd2Vha2VyIGFtb25nIGNoaWxkcmVuIChtaWRkbGUgYW5kIGJvdHRvbSByb3dzKS4KCkhlcmUgSSBwcm92aWRlIGEgZm9ybWFsIGFuYWx5c2lzIG9mIGpvaW50IGRlcGVuZGVuY3kgaW4gZWFjaCBhZ2UgZ3JvdXAgc2VwYXJhdGVseSwgYW5kIGEgZm9ybWFsIGNvbXBhcmlzb24gb2YgdGhlc2UgdGVuZGVuY2llcyBhY3Jvc3MgYWdlIGdyb3Vwcy4gVGhlc2UgYW5hbHlzZXMgd2VyZSBjb25kdWN0ZWQgdXNpbmcgZGF0YSBwb29sZWQgYWNyb3NzIGFsbCBzYW1wbGVzIChpLmUuLCBTdHVkaWVzIDEtNCBmb3IgYWR1bHRzLCBTdHVkaWVzIDIgYW5kIDMgZm9yIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4sIGFuZCBTdHVkaWVzIDMgYW5kIDQgZm9yIDQtIHRvIDYteWVhci1vbGQgY2hpbGRyZW4pLiBUaGUgcHJpbWFyeSBwYXJhbWV0ZXIgb2YgaW50ZXJlc3QgaW4gdGhlc2UgYW5hbHlzZXMgaXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gX0JPRFlfIGFuZCBfTUlORF8gc2NvcmVzOiBJZiBhdHRyaWJ1dGlvbnMgb2YgSEVBUlQgYXJlIGpvaW50bHkgZGVwZW5kZW50IG9uIGF0dHJpYnV0aW9ucyBvZiBib3RoIEJPRFkgYW5kIE1JTkQsIHRoZW4gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gX0JPRFlfIGFuZCBfTUlORF8gc2NvcmVzIHNob3VsZCBiZSBhIHN0cm9uZyBwcmVkaWN0b3Igb2YgX0hFQVJUXyBzY29yZXMsIGFib3ZlIGFuZCBiZXlvbmQgZWl0aGVyIF9CT0RZXyBzY29yZXMgb3IgX01JTkRfIHNjb3JlcyBvbiB0aGVpciBvd24uIEluIGFkZGl0aW9uIHRvIHVzaW5nIF9CT0RZXyBzY29yZXMgKHdoZW4gX01JTkRfIHNjb3JlcyBhcmUgYXQgemVybyksIF9NSU5EXyBzY29yZXMgKHdoZW4gX0JPRFlfIHNjb3JlcyBhcmUgYXQgemVybyksIGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBfQk9EWV8gYW5kIF9NSU5EXyBzY29yZXMgdG8gcHJlZGljdCBfSEVBUlRfIHNjb3JlcywgdGhlc2UgbW9kZWxzIGFsc28gaW5jbHVkZSByYW5kb20gaW50ZXJjZXB0cyBmb3IgcGFydGljaXBhbnRzLCBuZXN0ZWQgd2l0aGluIHN0dWRpZXMsIGFuZCByYW5kb20gaW50ZXJjZXB0cyBmb3IgdGFyZ2V0IGNoYXJhY3RlcnMuCgpBbW9uZyBhZHVsdHMsIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIF9CT0RZXyBhbmQgX01JTkRfIHNjb3JlcyB3YXMgY2xlYXJseSBkaWZmZXJlbnRpYWJsZSBmcm9tIHplcm8sIGxlbmRpbmcgZnVydGhlciBzdXBwb3J0IHRvIHRoZSBjbGFpbSB0aGF0IEhFQVJUIGlzIGpvaW50bHkgZGVwZW5kZW50IG9uIGJvdGggQk9EWSBhbmQgTUlORCBhbW9uZyBVUyBhZHVsdHMuIEluIGNvbnRyYXN0LCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBfQk9EWV8gYW5kIF9NSU5EXyBzY29yZXMgd2FzIG5vdCBkaWZmZXJlbnRpYWJsZSBmcm9tIHplcm8gYW1vbmcgZWl0aGVyIDctIHRvIDkteWVhci1vbGQgb3IgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiAoc2VlICJCT0RZIFwqIE1JTkQiIHJvdyBpbiBUYWJsZSBCLjMpLCBzdWdnZXN0aW5nIHRoYXQgdGhpcyBqb2ludCBkZXBlbmRlbmN5IGlzIG5vdCBwcmVzZW50IGluIHRoZSBhZ2dyZWdhdGUgZm9yIGVpdGhlciBvZiB0aGVzZSBhZ2UgZ3JvdXBzLiBBIGZvcm1hbCBjb21wYXJpc29uIGFjcm9zcyBhZ2UgZ3JvdXBzIGZ1cnRoZXIgY29uZmlybWVkIHRoZXNlIGFwcGFyZW50IGRldmVsb3BtZW50YWwgZGlmZmVyZW5jZXM6IFRoZSBpbnRlcmFjdGl2ZSBlZmZlY3Qgd2FzIHN1YnN0YW50aWFsbHkgYXR0ZW51YXRlZCBhbW9uZyBib3RoIG9sZGVyIGNoaWxkcmVuIGFuZCB5b3VuZ2VyIGNoaWxkcmVuLCByZWxhdGl2ZSB0byBhZHVsdHMgKHNlZSAiQk9EWSAmIE1JTkQiIHJvd3MgaW4gVGFibGUgQi40KS4KCmBgYHtyfQojIHJfam9pbnRkZXAgPC0gYnJtKEhFQVJUIH4gQk9EWSAqIE1JTkQgKiBhZ2VfZ3JvdXAgKwojICAgICAgICAgICAgICAgICAgICAgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdHVkeS9zdWJpZCksCiMgICAgICAgICAgICAgICAgICAgZGF0YSA9IHNjb3Jlc19hbGwgJT4lIHNwcmVhZChmYWN0b3IsIHNjb3JlKSwKIyAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQpCiMgc2F2ZVJEUyhyX2pvaW50ZGVwLCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9qb2ludGRlcCIpCgpyX2pvaW50ZGVwIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3Jfam9pbnRkZXAiKQoKc3VtbWFyeShyX2pvaW50ZGVwKQpgYGAKCmBgYHtyfQojIHJfam9pbnRkZXBfYWQgPC0gYnJtKEhFQVJUIH4gQk9EWSAqIE1JTkQgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN0dWR5L3N1YmlkKSwKIyAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gc2NvcmVzX2FsbCAlPiUgc3ByZWFkKGZhY3Rvciwgc2NvcmUpICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGFnZV9ncm91cCA9PSAiQWR1bHRzIiksCiMgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0KQojIHNhdmVSRFMocl9qb2ludGRlcF9hZCwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3Jfam9pbnRkZXBfYWQiKQoKcl9qb2ludGRlcF9hZCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2pvaW50ZGVwX2FkIikKCnN1bW1hcnkocl9qb2ludGRlcF9hZCkKYGBgCgpgYGB7cn0KIyByX2pvaW50ZGVwXzc5IDwtIGJybShIRUFSVCB+IEJPRFkgKiBNSU5EICsgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdHVkeSksCiMgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQyXzc5X3Njb3JlZF9hZCAlPiUgCiMgICAgICAgICAgICAgICAgICAgICAgICBmdWxsX2pvaW4oZDNfNzlfc2NvcmVkX2FkKSAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgIHNwcmVhZChmYWN0b3IsIHNjb3JlKSwKIyAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGl0ZXIgPSAyMDAwLAojICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQojIHNhdmVSRFMocl9qb2ludGRlcF83OSwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3Jfam9pbnRkZXBfNzkiKQoKcl9qb2ludGRlcF83OSA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2pvaW50ZGVwXzc5IikKCnN1bW1hcnkocl9qb2ludGRlcF83OSkKYGBgCgpgYGB7cn0KIyByX2pvaW50ZGVwXzQ2IDwtIGJybShIRUFSVCB+IEJPRFkgKiBNSU5EICsgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdHVkeS9zdWJpZCksCiMgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxfam9pbihkNF80Nl9zY29yZWRfYWQpICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgc3ByZWFkKGZhY3Rvciwgc2NvcmUpLAojICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgaXRlciA9IDIwMDAsCiMgICAgICAgICAgICAgICAgICAgICAgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCiMgc2F2ZVJEUyhyX2pvaW50ZGVwXzQ2LCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9qb2ludGRlcF80NiIpCgpyX2pvaW50ZGVwXzQ2IDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3Jfam9pbnRkZXBfNDYiKQoKc3VtbWFyeShyX2pvaW50ZGVwXzQ2KQpgYGAKCmBgYHtyfQpyZWd0YWJfam9pbnRkZXBfYnlhZ2Vncm91cCA8LSBiaW5kX3Jvd3MoCiAgZml4ZWYocl9qb2ludGRlcF9hZCkgJT4lCiAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtIikgJT4lCiAgICBtdXRhdGUoYWdlX2dyb3VwID0gIkFkdWx0cyIpLAogIGZpeGVmKHJfam9pbnRkZXBfNzkpICU+JQogICAgZGF0YS5mcmFtZSgpICU+JQogICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbSIpICU+JQogICAgbXV0YXRlKGFnZV9ncm91cCA9ICJDaGlsZHJlbiwgNy05eSIpLAogIGZpeGVmKHJfam9pbnRkZXBfNDYpICU+JQogICAgZGF0YS5mcmFtZSgpICU+JQogICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbSIpICU+JQogICAgbXV0YXRlKGFnZV9ncm91cCA9ICJDaGlsZHJlbiwgNC02eSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBzLmUuID0gRXN0LkVycm9yKSAlPiUKICBtdXRhdGUocGFyYW0gPSBmYWN0b3IocGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkludGVyY2VwdCIsICJCT0RZIiwgIk1JTkQiLCAiQk9EWTpNSU5EIikpLAogICAgICAgICBiID0gZm9ybWF0KHJvdW5kKGIsIDIpLCBuc21hbGwgPSAyKSwKICAgICAgICAgcy5lLiA9IGZvcm1hdChyb3VuZChzLmUuLCAyKSwgbnNtYWxsID0gMiksCiAgICAgICAgIENJOTUgPSBwYXN0ZTAoIlsiLCBmb3JtYXQocm91bmQoUTIuNSwgMiksIG5zbWFsbCA9IDIpLAogICAgICAgICAgICAgICAgICAgICAgICIsICIsIGZvcm1hdChyb3VuZChROTcuNSwgMiksIG5zbWFsbCA9IDIpLCAiXSIpLAogICAgICAgICBub256ZXJvID0gaWZlbHNlKFEyLjUgKiBROTcuNSA+PSAwLCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zdGFydHNfd2l0aCgiUSIpKSAlPiUKICBzZWxlY3QoLXN0YXJ0c193aXRoKCJzLmUuIikpICU+JQogIGdhdGhlcihrZXksIHZhbHVlLCAtYyhhZ2VfZ3JvdXAsIHBhcmFtKSkgJT4lCiAgbXV0YXRlKGtleSA9IGNhc2Vfd2hlbihhZ2VfZ3JvdXAgPT0gIkFkdWx0cyIgfiBwYXN0ZTAoImFkXyIsIGtleSksCiAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPT0gIkNoaWxkcmVuLCA3LTl5IiB+IHBhc3RlMCgiY2gwMV8iLCBrZXkpLAogICAgICAgICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID09ICJDaGlsZHJlbiwgNC02eSIgfiBwYXN0ZTAoImNoMDJfIiwga2V5KSkpICU+JQogIHNlbGVjdCgtYWdlX2dyb3VwKSAlPiUKICBzcHJlYWQoa2V5LCB2YWx1ZSkgJT4lCiAgYXJyYW5nZShwYXJhbSkKYGBgCgpgYGB7cn0KdGFibGVCLjMgPC0gcmVndGFiX2pvaW50ZGVwX2J5YWdlZ3JvdXAgJT4lCiAgc2VsZWN0KC1jb250YWlucygicy5lLiIpKSAlPiUKICByZW5hbWUoUGFyYW1ldGVyID0gcGFyYW0sCiAgICAgICAgIGIgPSBhZF9iLCBiID0gY2gwMV9iLCBiID0gY2gwMl9iLAogICAgICAgICBgOTUlIENJYCA9IGFkX0NJOTUsIGA5NSUgQ0lgID0gY2gwMV9DSTk1LCBgOTUlIENJYCA9IGNoMDJfQ0k5NSwKICAgICAgICAgIiAiID0gYWRfbm9uemVybywgIiAiID0gY2gwMV9ub256ZXJvLCAiICIgPSBjaDAyX25vbnplcm8pICU+JQogIGthYmxlKGZvcm1hdCA9ICJodG1sIiwgYWxpZ24gPSBjKCJsIiwgcmVwKGMocmVwKCJyIiwgMiksICJsIiksIDMpKSwgCiAgICAgICAgY2FwdGlvbiA9ICJUYWJsZSBCLjM6IFJlZ3Jlc3Npb24gYW5hbHlzZXMgb2YgdGhlIGpvaW50IGRlcGVuZGVuY3kgb2YgSEVBUlQgb24gYm90aCBCT0RZIGFuZCBNSU5ELiBUaGUgdGFibGUgcHJlc2VudHMgcmVzdWx0cyBmcm9tIGEgc2VyaWVzIG9mIEJheWVzaWFuIHJlZ3Jlc3Npb25zIHVzaW5nIHBvb2xlZCBkYXRhIGZyb20gYWxsIHNhbXBsZXMgd2l0aGluIGFuIGFnZSBncm91cCAoaS5lLiwgU3R1ZGllcyAxLTQgZm9yIGFkdWx0cywgU3R1ZGllcyAyIGFuZCAzIGZvciA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuLCBhbmQgU3R1ZGllcyAzIGFuZCA0IGZvciA0IC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbi4gVGhlc2UgcmVncmVzc2lvbnMgZWFjaCBpbmNsdWRlZCA0IGZpeGVkIGVmZmVjdCBwYXJhbWV0ZXJzOiAoMSkgdGhlIGludGVyY2VwdCwgd2hpY2ggaXMgYW4gaW5kZXggb2YgSEVBUlQgc2NvcmVzIHdoZW4gQk9EWSBhbmQgTUlORCBzY29yZXMgd2VyZSBib3RoIHplcm87ICgyKSB0aGUgZWZmZWN0IG9mIEJPRFkgc2NvcmVzIG9uIEhFQVJUIHNjb3JlcyAod2hlbiBNSU5EIHNjb3JlcyB3ZXJlIHplcm8pOyAoMykgdGhlIGVmZmVjdCBvZiBNSU5EIHNjb3JlcyBvbiBIRUFSVCBzY29yZXMgKHdoZW4gQk9EWSBzY29yZXMgd2VyZSB6ZXJvKTsgYW5kICg0KSB0aGUgaW50ZXJhY3RpdmUgZWZmZWN0IG9mIEJPRFkgYW5kIE1JTkQgc2NvcmVzIG9uIEhFQVJUIHNjb3Jlcy4gVGhpcyBsYXN0IGVmZmVjdCBpcyBoaWdobGlnaHRlZCBpbiBib2xkLCBiZWNhdXNlIGl0IGlzIHRoZSBwcmltYXJ5IHBhcmFtZXRlciBvZiBpbnRlcmVzdCBmb3IgdGhlc2UgYW5hbHlzZXMuIEluIGFkZGl0aW9uIHRvIHRoZSBmaXhlZCBlZmZlY3RzIGxpc3RlZCBoZXJlLCB0aGVzZSByZWdyZXNzaW9ucyBpbmNsdWRlZCByYW5kb20gaW50ZXJjZXB0cyBmb3IgcGFydGljaXBhbnRzLCBuZXN0ZWQgd2l0aGluIHN0dWRpZXMsIGZvciBhZHVsdHMgYW5kIGZvciA0LSB0byA2LXllYXItb2xkIGNoaWxkcmVuOyByYW5kb20gaW50ZXJjZXB0cyBmb3Igc3R1ZGllcyBmb3IgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiAoc2luY2UgbmVpdGhlciBzdHVkeSB3aXRoIHRoaXMgYWdlIGdyb3VwIGZlYXR1cmVkIGEgd2l0aGluLXN1YmplY3RzIGRlc2lnbik7IGFuZCByYW5kb20gaW50ZXJjZXB0cyBmb3IgdGFyZ2V0IGNoYXJhY3RlcnMgKG4gPSAyMSBmb3IgYWR1bHRzLCBuID0gOSBmb3IgYm90aCA3LSB0byA5LXllYXItb2xkIGFuZCA0LSB0byA2LXllYXItb2xkIGNoaWxkcmVuKS4gRm9yIGVhY2ggcGFyYW1ldGVyLCB0aGUgdGFibGUgaW5jbHVkZXMgdGhlIGVzdGltYXRlIChiKSBhbmQgYSA5NSUgY3JlZGlibGUgaW50ZXJ2YWwgZm9yIHRoYXQgZXN0aW1hdGUuIEFzdGVyaXNrcyBpbmRpY2F0ZSA5NSUgY3JlZGlibGUgaW50ZXJ2YWxzIHRoYXQgZG8gbm90IGluY2x1ZGUgMC4iKSAlPiUgIAogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYyg0LCBib2xkID0gVCkgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIiA9IDEsCiAgICAgICAgICAgICAgICAgICAgICJBZHVsdHMiID0gMywgIkNoaWxkcmVuLCA3LTl5IiA9IDMsICJDaGlsZHJlbiwgNC02eSIgPSAzKSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnRhYmxlQi4zCmBgYAoKYGBge3J9CnJlZ3RhYl9qb2ludGRlcF9kZXZjb21wIDwtIGZpeGVmKHJfam9pbnRkZXApICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtIikgJT4lCiAgbXV0YXRlKENJOTUgPSBwYXN0ZTAoIlsiLCBmb3JtYXQocm91bmQoUTIuNSwgMiksIG5zbWFsbCA9IDIpLAogICAgICAgICAgICAgICAgICAgICAgICIsICIsIGZvcm1hdChyb3VuZChROTcuNSwgMiksIG5zbWFsbCA9IDIpLCAiXSIpLAogICAgICAgICBub256ZXJvID0gaWZlbHNlKFEyLjUgKiBROTcuNSA+PSAwLCAiKiIsICIiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgcy5lLiA9IEVzdC5FcnJvcikgJT4lCiAgbXV0YXRlKHBhcmFtID0gZmFjdG9yKHBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJJbnRlcmNlcHQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWdlX2dyb3VwX29sZCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZ2VfZ3JvdXBfeW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQk9EWSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCT0RZOmFnZV9ncm91cF9vbGQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQk9EWTphZ2VfZ3JvdXBfeW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUlORCIsICJNSU5EOmFnZV9ncm91cF9vbGQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUlORDphZ2VfZ3JvdXBfeW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQk9EWTpNSU5EIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJPRFk6TUlORDphZ2VfZ3JvdXBfb2xkIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJPRFk6TUlORDphZ2VfZ3JvdXBfeW5nIiksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkludGVyY2VwdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9sZGVyIGNoaWxkcmVuIHZzLiBhZHVsdHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZb3VuZ2VyIGNoaWxkcmVuIHZzLiBhZHVsdHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCT0RZIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQk9EWSAqIE9sZGVyIGNoaWxkcmVuIHZzLiBhZHVsdHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCT0RZICogWW91bmdlciBjaGlsZHJlbiB2cy4gYWR1bHRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUlORCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1JTkQgKiBPbGRlciBjaGlsZHJlbiB2cy4gYWR1bHRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUlORCAqIFlvdW5nZXIgY2hpbGRyZW4gdnMuIGFkdWx0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJPRFkgKiBNSU5EIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQk9EWSAqIE1JTkQgKiBPbGRlciBjaGlsZHJlbiB2cy4gYWR1bHRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQk9EWSAqIE1JTkQgKiBZb3VuZ2VyIGNoaWxkcmVuIHZzLiBhZHVsdHMiKSkpICU+JQogIHNlbGVjdChwYXJhbSwgYiwgcy5lLiwgQ0k5NSwgbm9uemVybykgJT4lCiAgYXJyYW5nZShwYXJhbSkKYGBgCgpgYGB7cn0KdGFibGVCLjQgPC0gcmVndGFiX2pvaW50ZGVwX2RldmNvbXAgJT4lCiAgc2VsZWN0KC1jb250YWlucygicy5lLiIpKSAlPiUKICBtdXRhdGUoYiA9IGZvcm1hdChyb3VuZChiLCAyKSwgbnNtYWxsID0gMikpICU+JQogIHJlbmFtZShQYXJhbWV0ZXIgPSBwYXJhbSwKICAgICAgICAgYDk1JSBDSWAgPSBDSTk1KSAlPiUKICByZW5hbWVfYWxsKGZ1bnMoZ3N1Yigibm9uemVybyIsICIgIiwgLikpKSAlPiUKICBrYWJsZShmb3JtYXQgPSAiaHRtbCIsIGFsaWduID0gYygibCIsIHJlcChjKHJlcCgiciIsIDIpLCAibCIpLCAzKSksIAogICAgICAgIGNhcHRpb24gPSAiVGFibGUgQi4zOiBEZXZlbG9wbWVudGFsIGNvbXBhcmlzb25zIG9mIHRoZSBqb2ludCBkZXBlbmRlbmN5IG9mIEhFQVJUIG9uIGJvdGggQk9EWSBhbmQgTUlORC4gVGhlIHRhYmxlIHByZXNlbnRzIHJlc3VsdHMgZnJvbSBhIHNpbmdsZSBCYXllc2lhbiByZWdyZXNzaW9uIHVzaW5nIHBvb2xlZCBkYXRhIGZyb20gYWxsIHNhbXBsZXMgaW4gYWxsIHN0dWRpZXMuIFRoaXMgcmVncmVzc2lvbiBpbmNsdWRlZCAxMiBmaXhlZCBlZmZlY3QgcGFyYW1ldGVyczogKDEpIHRoZSBpbnRlcmNlcHQgKGZvciBhZHVsdHMpLCB3aGljaCBpcyBhbiBpbmRleCBvZiBIRUFSVCBzY29yZXMgYW1vbmcgYWR1bHRzIHdoZW4gQk9EWSBhbmQgTUlORCBzY29yZXMgd2VyZSBib3RoIHplcm87ICgyLTMpIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIG9sZGVyIGNoaWxkcmVuIHZzLiBhZHVsdHMgYW5kIHlvdW5nZXIgY2hpbGRyZW4gdnMuIGFkdWx0cyBpbiB0aGVpciBIRUFSVCBzY29yZXMgd2hlbiBCT0RZIGFuZCBNSU5EIHNjb3JlcyB3ZXJlIGJvdGggemVybzsgKDQtNikgdGhlIGVmZmVjdCBvZiBCT0RZIHNjb3JlcyBvbiBIRUFSVCBzY29yZXMgZm9yIGFkdWx0cywgYW5kIGRpZmZlcmVuY2VzIGZyb20gYWR1bHRzIGluIHRoaXMgZWZmZWN0IGZvciBvbGRlciBhbmQgeW91bmdlciBjaGlsZHJlbjsgKDctOSkgdGhlIGVmZmVjdCBvZiBNSU5EIHNjb3JlcyBvbiBIRUFSVCBzY29yZXMgZm9yIGFkdWx0cywgYW5kIGRpZmZlcmVuY2VzIGZyb20gYWR1bHRzIGluIHRoaXMgZWZmZWN0IGZvciBvbGRlciBhbmQgeW91bmdlciBjaGlsZHJlbjsgKDEwLTExKSB0aGUgaW50ZXJhY3RpdmUgZWZmZWN0IG9mIEJPRFkgYW5kIE1JTkQgc2NvcmVzIG9uIEhFQVJUIHNjb3JlcyBmb3IgYWR1bHRzLCBhbmQgZGlmZmVyZW5jZXMgZnJvbSBhZHVsdHMgaW4gdGhpcyBpbnRlcmFjdGl2ZSBlZmZlY3QgZm9yIG9sZGVyIGFuZCB5b3VuZ2VyIGNoaWxkcmVuLiBUaGVzZSBsYXN0IHRocmVlIGVmZmVjdHMgIGFyZSBoaWdobGlnaHRlZCBpbiBib2xkLCBiZWNhdXNlIHRoZXNlIGFyZSB0aGUgcHJpbWFyeSBwYXJhbWV0ZXJzIG9mIGludGVyZXN0IGZvciB0aGVzZSBhbmFseXNlcy4gSW4gYWRkaXRpb24gdG8gdGhlIGZpeGVkIGVmZmVjdHMgbGlzdGVkIGhlcmUsIHRoZSByZWdyZXNzaW9uIGluY2x1ZGVkIHJhbmRvbSBpbnRlcmNlcHRzIGZvciBwYXJ0aWNpcGFudHMsIG5lc3RlZCB3aXRoaW4gc3R1ZGllcywgYW5kIHJhbmRvbSBpbnRlcmNlcHRzIGZvciBjaGFyYWN0ZXJzIChuID0gMjQpLiBGb3IgZWFjaCBwYXJhbWV0ZXIsIHRoZSB0YWJsZSBpbmNsdWRlcyB0aGUgZXN0aW1hdGUgKGIpIGFuZCBhIDk1JSBjcmVkaWJsZSBpbnRlcnZhbCBmb3IgdGhhdCBlc3RpbWF0ZS4gQXN0ZXJpc2tzIGluZGljYXRlIDk1JSBjcmVkaWJsZSBpbnRlcnZhbHMgdGhhdCBkbyBub3QgaW5jbHVkZSAwLiIpICU+JSAgCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKGMoMTA6MTIpLCBib2xkID0gVCkgJT4lCiAgZ3JvdXBfcm93cygiSEVBUlQgc2NvcmVzIHdoZW4gQk9EWSBzY29yZXMgYW5kIE1JTkQgc2NvcmVzID0gMCIsIDEsIDMpICU+JQogIGdyb3VwX3Jvd3MoIlRoZSBlZmZlY3Qgb2YgQk9EWSBzY29yZXMgb24gSEVBUlQgc2NvcmVzIHdoZW4gTUlORCBzY29yZXMgPSAwIiwgNCwgNikgJT4lCiAgZ3JvdXBfcm93cygiVGhlIGVmZmVjdCBvZiBNSU5EIHNjb3JlcyBvbiBIRUFSVCBzY29yZXMgd2hlbiBCT0RZIHNjb3JlcyA9IDAiLCA3LCA5KSAlPiUKICBncm91cF9yb3dzKCJUaGUgaW50ZXJhY3RpdmUgZWZmZWN0IG9mIEJPRFkgc2NvcmVzIGFuZCBNSU5EIHNjb3JlcyBvbiBIRUFSVCBzY29yZXMiLCAxMCwgMTIpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQp0YWJsZUIuNApgYGAKCg==